Мы используем Memcached в нашем приложении Ruby on Rails.Я пытаюсь разобраться в этом немного подробнее, и в конце каждого запроса я выхожу из системы со значением CACHE.stats[:curr_items]
, которое мне кажется - это количество сохраненных элементов в кэше.
Я записываю значение CACHE.stats[:curr_items]
в начале и конце запроса, что позволяет мне видеть, сколько новых вещей было сохранено в кеше в этом запросе (загрузка страницы).Довольно часто это отрицательное число, то есть значение CACHE.stats[:curr_items]
уменьшается.
Я не могу понять, почему это уменьшится.Мы никогда не удаляем какие-либо ключи кеша, и я не могу себе представить, почему он все равно уменьшится, просто перезагрузив ту же страницу.
Я также ожидал бы, что CACHE.stats[:curr_items]
перейдет в 0 после выполнения CACHE.flush
, но он остается прежним.
У меня есть другой способ перечисления текущих ключей memcache, который устанавливает соединение telnet с memcache и использует stats items
и stats cachedump
для отображения текущих ключей.Это число, как правило, отличается от CACHE.stats[:curr_items]
и, опять же, не обнуляется, если я сделаю CACHE.flush
.
Может кто-нибудь объяснить, что на самом деле делает CACHE.stats[:curr_items]
?
Кроме того, почему ни один из этих методов не обнуляется после CACHE.flush
?Может быть, CACHE.flush делает недействительными ключи кеша, но фактически не удаляет их.Это достаточно справедливо и имеет смысл, если это так.
РЕДАКТИРОВАТЬ : я только что провел эксперимент:
> CACHE.stats[:curr_items]
=> [529]
> CACHE.stats[:total_items]
=> [1080]
> stored = CACHE.add("qwrexcv#{rand(10000000)}", User.last, 604800)
=> nil
> CACHE.stats[:curr_items]
=> [529]
> CACHE.stats[:total_items]
=> [1081]
Итак, я добавилновая вещь в кеш.curr_items остался прежним, а total_items увеличился, что еще больше подтверждает идею о том, что curr_items - это не то, что я думаю.