2015-02-09 108 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