У меня есть система, которая отправляет одновременно get запросов к couchbase. Каждый раз, когда система получает существующий ключ, он должен обновлять (продлевать) срок его службы. Количество времени не так важно и измеряется по дням: основная идея заключается в том, что ключ должен быть удален после того, как никто не получит его в течение некоторого времени (например, 20 дней).Время обновления ключа в couchbase
Я полагаю, что необходимо использовать операцию touch
, но должны ли я использовать клавиши lock
, что затруднит работу? Можно ли использовать memcached-пакет (кажется, нет API lock
, но, возможно, gets
должен сделать трюк)?
import pylibmc
class Cache(Singleton):
def init(self):
self.mc = pylibmc.Client(
# connection settings here
)
def get(self, key):
"""get key without locking it and update lifetime"""
result = self.mc.get(key)
if result:
# prolongate key for another 20 days
self.mc.touch(key, 60*60*24*20)
return result
def get_and_lock(self, key):
"""lock the key while getting it and update lifetime"""
# should use couchbase package as memcached does not have lock API
# or use 'gets' instead?