memcached: CACHE.stats [: curr_items] часто уменьшается - PullRequest
0 голосов
/ 14 февраля 2019

Мы используем 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 - это не то, что я думаю.

1 Ответ

0 голосов
/ 15 февраля 2019

Как описано в memcached документах curr_items показывает количество элементов, находящихся в настоящее время в кэше.total_items - это количество всех элементов, которые были сохранены с момента запуска сервера.

Насколько я могу судить, счетчик curr_items может быть уменьшен четырьмя способами: (i) удалив ключ,(ii) очисткой, (iii) истечением срока действия и (iv) уменьшением объема памяти, доступной для сервера memcached.Как правило, выселение не уменьшает количество предметов, потому что предмет, как правило, выселяется, чтобы освободить место для нового.

Команда flush_all memcached устанавливает счетчик curr_items в 0, по крайней мере, в memcached 1.5.Вы можете проверить это с помощью подключения через telnet.Поведение может быть другим для memcached 1.4, поскольку многое изменилось с версии 1.4 на 1.5.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...