Как насчет истекшего времени, когда кэш попал в Memcache? - PullRequest
3 голосов
/ 30 ноября 2011

Когда я устанавливаю ключ в Memcache с определенным сроком действия (например, 10 минут)?
Как насчет того, когда я его достигну?

Я ожидаю, что время истеклобыть обновленным через 10 минут.

Если нет, каково решение для обновления с истекшим временем?

Ответы [ 2 ]

3 голосов
/ 01 декабря 2011

Все операции хранилища имеют срок действия, поэтому его нужно устанавливать каждый раз, когда вы выполняете операцию хранилища.

Если вы используете последнюю версию memcached, тогда у вас будет возможность сделать touch и gat (получить и коснуться) команды.touch позволит вам просто сбросить срок действия ключа, а gat позволит вам получить ключ и сбросить срок действия ключа.В обоих случаях вы должны указать новое время истечения, поскольку memcached не запомнит его.

1 голос
/ 12 ноября 2015

Чтобы свести к минимуму количество операций touch (), вы можете сохранить время истечения в переменной 'flag', если API вашего модуля позволяет это.

В соответствии с https://github.com/memcached/memcached/blob/master/doc/protocol.txt флаги сохраняются с помощью операции SET

 set <key> <flags> <exptime> <bytes> [noreply]\r\n

и может быть получено с помощью операции GET:

 get <key>*\r\n

 Each item sent by the server looks like this:

 VALUE <key> <flags> <bytes> [<cas unique>]\r\n <data block>\r\n

т.е. вы получаете ФЛАГИ в любое время, когда вы делаете GET в любом случае вы хотите) Поэтому я предлагаю использовать FLAGS, чтобы проверить, достаточно ли времени истечения, и делать TOUCH, только если это действительно необходимо, а не каждый раз при выполнении GET.

В такой схеме вы больше не можете делать TOUCH (потому что это не время истечения смещения, хранящееся в флагах), но следует использовать CAS для установки нового VALUE и FLAGS.

Обратите внимание, что в большинстве случаев высокоуровневые библиотеки (perl, php и т. Д.) Используют FLAGS для собственных нужд, например, для сохранения флагов, были ли данные сжаты, сериализованы, преобразованы из UTF-8 и т. Д., Поэтому вы использовать флаги только для простых данных (не сжатых и не сериализованных вашей библиотекой).

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