跳转到主要内容
dustise 提交于 11 October 2014

昨晚有个新朋友在群里问了个有意思的问题,他想要实现一个功能,在某个时间点清除一部分缓存。

大家都很熟悉的drush cc all,或者过期机制,参考一下cache_set的文档说明,会知道是无法“精确”实现这个需求的:

$expire: (optional) One of the following values:   CACHE_PERMANENT: Indicates that the item should never be removed unless explicitly told to using cache_clear_all() with a cache ID. CACHE_TEMPORARY: Indicates that the item should be removed at the next general cache wipe. A Unix timestamp: Indicates that the item should be kept at least until the given time, after which it behaves like CACHE_TEMPORARY.  

指定时间戳过了之后,还是要过若干时间,一般是Cron运行时发生,因此缓存失效的时间会比指定的时间戳要晚。

这里就需要https://www.drupal.org/project/memcache,用这个Module来接管缓存,缓存项目的过期是由Memcached维护的,相对于傻等Cron,这明显是个更靠谱的方案。

另外还有个折腾方法

比如说BIN这个参数,在数据库缓存中,BIN的选项是个有限列表,因为每个BIN会对应到一个数据表;而在Memcache的缓存中,BIN是可以在settings.php中设置的,甚至每个BIN可以对应到不同的Memcache服务器。

借助不同的BIN,我们可以单独清空某个BIN里面的所有缓存——不同服务器造成很多便利。

Drupal 版本

网站上线后还一直没有清过缓存呢,一般都是修改的时候,我才会去清一下。

memcache,这个模块,收了!谢谢!