为登录用户设置瞬变的最佳方式(关于性能)是什么? 时间:2014-12-09 作者:Gixty 我为我的登录用户提供了一个选项,他们可以在那里隐藏他们不想看到的帖子。在我实现瞬态之前,一切都按预期工作。当我将瞬态设置为缓存POST查询时,在瞬态过期之前不会隐藏POST。那么,我该怎么办?我唯一能想到的就是为每个登录的用户设置一个瞬态,并在每次用户隐藏帖子时重置它。我这样问是因为我相信,如果我有成千上万的用户,这个解决方案在性能方面可能不是很有效。因此,在这种情况下,你会建议我怎么做? 2 个回复 SO网友:Mark Kaplun 经验法则是,除了对象缓存之外,不要对登录的用户进行任何缓存。实际上,IIRC对象缓存将为您提供所需的内容。但如果必须按自己的方式执行,则应使缓存键基于查询,并对不同的查询使用不同的缓存。一个类似但可能更容易理解的想法是,根据用户的设置对用户进行“分组”,并为每个组保留一个缓存。顺便说一句,瞬变是错误的缓存工具,或者更好地说,它们的使用并不能免除您进行缓存无效化,因为您通常不希望出现这样的情况:您发送了关于新帖子的通知,但由于缓存已过时,没有人可以读取它。 SO网友:Jonathan 这个Transients API 与选项API类似,这意味着现在开始,除非他们在v4中进行更改。1或将来的版本,所有的瞬态都将在tableprefix_options 桌子如果你的网站很忙,那意味着你将有大量的阅读和;写操作首先违背了缓存的目的。目前,没有可用的挂钩可以改变功能,只接受三个选项:瞬态的名称瞬态的值瞬态的过期如果您要编写自己的代码(在这种情况下是不明智的),您的选择将是破解内核,这与最佳实践背道而驰,您需要自己的支持,因为由此产生的任何问题都会导致社区(mods和其他用户)建议您恢复并查看问题是否仍然存在。也就是说,我的建议是利用WordPress之外的选项,并通过插件将它们与WordPress可用的选项结合起来。这意味着使用Memcached或Redis等,通过MySQL/MariaDB/Percona等启用查询缓存(除非您存储的是非常小的数据块,否则Redis将胜过Memcached)。这样,您就有了一个数据存储,它不会反复敲打一个特定的表。W3 Total Cache支持APC和;对象的Memcached(&C);数据库缓存(以及文件缓存,但通常不建议这样做,尤其是如果您有超慢的磁盘,即SSD以外的任何磁盘),但它体积庞大,而且可能会有过大的杀伤力,因为绝大多数选项都可以在服务器级别完成(即文件缓存、浏览器缓存等)。对于Redis,您可以使用WP Redis 它将为您处理对象缓存,而且非常重要。如果您从未使用过Redis,我会查看:redis.io (无法发布其他链接,否则我会为您链接:))要在MySQL中启用查询缓存,只需确保my中存在以下内容即可。cnf(通常为/etc/my.cnf或/etc/mysql/my.cnf,具体取决于操作系统):query_cache_size = TOTALCACHESIZE query_cache_type = 1 query_cache_limit = LIMITSIZEOFRESULT 其中TOTALCACHESIZE是整个查询缓存的总大小,LIMITSIZEOFRESULT是将被缓存的最大结果大小。超过此大小的任何内容都将被忽略。您可以这样指定大小(以K或M为单位)(末端没有B)(这将是一个一般的起点):query_cache_limit = 512K query_cache_size = 16M query_cache_type = 1 NOTE: BEFORE dropping that in, shut down MySQL, backup your my.cnf file and then make the changes.如果您在MySQL运行时进行更改,然后重新启动/重新加载到新配置中,则可能会出现错误,说明MySQL未能正确关闭,然后您必须进行故障排除(这在我身上发生过几次)。除此之外,还有其他方法可以通过修改配置来加快MySQL的速度,但这太容易让人忘乎所以,从一个最简单的方法开始,在提高性能的同时加快速度是最好的途径。 结束 文章导航