2015-02-09 388 views
1

我使用Redis来存储会话并存储缓存,并且我想实现“清除缓存”功能。Redis。 Php Cache + Php Session

我有一些问题:

1)的Redis无法通过模式删除( “ENTITY_CACHE:*”)

2) “flushall” 同时删除缓存和会话(会话不应该被删除)

3)多个数据库的功能已被弃用,所以我可能不会使用“flashdb”

4)模式获取所有键(“ENTITY_CACHE:*”),然后删除每个键 - 因为对我来说这是不好的做法,这些键的数量可能超过一百万...

$redis->delete($redis->keys('ENTITY_CACHE:*'))

我宁愿唯一的解决办法是:使用 的Redis的多个实例,分离实例会议和高速缓存。但我不确定这是否是一个好的解决方案

你能给我一些建议吗?

+0

出于好奇,你在redis中缓存了一百万个? – castis 2015-02-09 19:46:21

+0

一般而言,缓存意味着大量的条目,并且我使用ZF2缓存存储,并且它不允许访问RedisClient实例,它是受保护的属性 – 2015-02-10 11:17:13

回答

0

但我不知道这是一个很好的解决方案

我觉得这是。我将Session和Cache分开放置在不同的实例上,因为它允许我为每个实例指定不同的内存限制(maxmemory),并且驱逐更加可控(它使用LRU算法)。此外,持久性设置似乎是实例广泛。请注意,应避免没有会话锁定的会话存储。我强烈建议使用SncRedisBundle,因为它实现了锁定(而PHP的Redis扩展没有)。

这有帮助吗?

+2

这是肯定的答案。 Cache和dB需要以不同的方式进行处理,以实现需要单独的实例 – 2017-07-30 20:31:00