2015-02-09 4 views
1

Я использую Redis для хранения сеанса и хранения кеша, и я хочу реализовать функцию «Очистить кеш».Redis. Php Cache + Php Session

У меня есть ряд проблем:

1) Redis не можете удалять по шаблону ("ENTITY_CACHE: *")

2) "FlushAll" удаляет как Cache и Сессии (Session не должны быть удалены)

3) Множественный функция DB устарела, поэтому я не могу использовать «flashdb»

4) Получить все ключи по шаблону («ENTITY_CACHE: *»), а затем удалить каждый ключ - как и для меня это это плохая практика, количество этих ключей может превышать миллион ...

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

Единственное решение, которое я предпочитаю: Использовать несколько экземпляров Redis, отделенный экземпляр для сессии и кэш. Но я не уверен, что это хорошее решение.

Можете ли вы дать мне совет?

+0

Из любопытства, что вы кешируете миллион в redis? – castis

+0

В общем, кеш означает огромное количество записей, и я использую хранилище кэш-памяти ZF2 и не предоставляет доступ к экземпляру RedisClient, это защищенное свойство –

ответ

0

Но я не уверен, если это хорошее решение

Я чувствую это. Я разделяю Session и Cache на отдельные экземпляры, так как он позволяет мне определять разные пределы памяти (maxmemory) для каждого, а выселение более управляемо (оно использует алгоритм LRU). Также настройки настойчивости кажутся экземплярами. Обратите внимание, что следует избегать хранения сеанса без блокировки сеанса. Я настоятельно рекомендую использовать SncRedisBundle, поскольку он реализует блокировку (а PHP Redis не расширяет).

Помогло ли это?

+2

Это ответ наверняка. Кэш и дБ необходимо обрабатывать по-разному, чтобы это требовало отдельного экземпляра –