如何在Memcache或Redis中按标记清除缓存?

时间:2016-10-02 16:41:59

标签: php caching doctrine-orm redis memcached

今天我在开发项目时遇到了问题。

例如,我通过缓存键= post_list_OFFSET_LIMIT将一些像博客文章这样的数据放到memcache中,其中offset并通过分页限制它的动态数据。

但是当我添加新帖子时,我无法通过前缀post_list_清除缓存。缓存过期后将显示新帖子。

Memcache没有标记功能。可以通过自定义代码添加标记支持。 redis有这个功能吗?按前缀标记或删除标记?

感谢。

1 个答案:

答案 0 :(得分:1)

您可以在redis中以3种方式解决:

  1. 使用SCAN命令:http://redis.io/commands/scan获取与您的模式匹配的密钥并将其删除。 How to atomically delete keys matching a pattern using Redis
  2. 设置密钥的到期时间。 http://redis.io/commands/expire。所以它在它生存了一段时间后就会过期(删除)。
  3. 将驱逐政策设为lru,http://redis.io/topics/lru-cache。因此,当新密钥需要空间时,redis本身会删除旧密钥。当且仅当您将redis用作缓存时才有效。