为登录用户设置瞬变的最佳方式(关于性能)是什么?

时间:2014-12-09 作者:Gixty

我为我的登录用户提供了一个选项,他们可以在那里隐藏他们不想看到的帖子。

在我实现瞬态之前,一切都按预期工作。当我将瞬态设置为缓存POST查询时,在瞬态过期之前不会隐藏POST。

那么,我该怎么办?我唯一能想到的就是为每个登录的用户设置一个瞬态,并在每次用户隐藏帖子时重置它。

我这样问是因为我相信,如果我有成千上万的用户,这个解决方案在性能方面可能不是很有效。因此,在这种情况下,你会建议我怎么做?

2 个回复
SO网友:Mark Kaplun

经验法则是,除了对象缓存之外,不要对登录的用户进行任何缓存。实际上,IIRC对象缓存将为您提供所需的内容。

但如果必须按自己的方式执行,则应使缓存键基于查询,并对不同的查询使用不同的缓存。一个类似但可能更容易理解的想法是,根据用户的设置对用户进行“分组”,并为每个组保留一个缓存。

顺便说一句,瞬变是错误的缓存工具,或者更好地说,它们的使用并不能免除您进行缓存无效化,因为您通常不希望出现这样的情况:您发送了关于新帖子的通知,但由于缓存已过时,没有人可以读取它。

SO网友:Jonathan

这个Transients API 与选项API类似,这意味着现在开始,除非他们在v4中进行更改。1或将来的版本,所有的瞬态都将在tableprefix_options 桌子如果你的网站很忙,那意味着你将有大量的阅读和;写操作首先违背了缓存的目的。

目前,没有可用的挂钩可以改变功能,只接受三个选项:

  1. 瞬态的名称
  2. 瞬态的值
  3. 瞬态的过期
    1. 如果您要编写自己的代码(在这种情况下是不明智的),您的选择将是破解内核,这与最佳实践背道而驰,您需要自己的支持,因为由此产生的任何问题都会导致社区(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的速度,但这太容易让人忘乎所以,从一个最简单的方法开始,在提高性能的同时加快速度是最好的途径。

结束

相关推荐

按自定义域(wp-Query和循环)排序和显示帖子)

我只想在主页上显示即将到来的活动帖子。我使用“custom field suite”插件创建了一个自定义字段,名为“ENDS”,表示事件结束的日期。正如你所知,我只想在家里举行即将到来的活动,最接近现在的日期排在第一位。过期后,我希望将其归档到“归档”中,该页面在另一个页面上可见(该页面还应以最近过期的事件开始排序归档的事件帖子)。模板使用无限滚动加载帖子,这是我的索引文件,带有默认循环:http://pastebin.com/x3NzZBZX我需要集成这样的东西,但没有成功:<?php $