Чтобы свести к минимуму количество операций 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 и т. Д., Поэтому вы использовать флаги только для простых данных (не сжатых и не сериализованных вашей библиотекой).