В проекте django мне нужно всего лишь кэшировать несколько запросов, используя из-за ограничений сервера таблицу кэша вместо memcached.
Один из этих запросов выглядит так:
Допустим, у меня есть объект Parent
, в котором много объектов Child
.
Мне нужно сохранить результат простого запроса parent.childs.all()
.
У меня нет проблем с этим, и все работает, как и ожидалось, с некоторым кодом, подобным
key = "%s_children" %(parent.name)
value = cache.get(key)
if value is None:
cache.set(key, parent.children.all(), CACHE_TIMEOUT)
value = cache.get(key)
Но иногда, просто иногда cache.set
ничего не делает, и после выполнения cache.set
, cache.get(key)
продолжает возвращать None
.
После некоторого теста я заметил, что cache.set
не работает, когда parent.children.all().count()
имеет более высокие значения.
Это означает, что если я храню внутри key
(например) 600 дочерних объектов, это работает нормально,
но это не будет работать с 1200 детьми.
Итак мой вопрос : есть ли предел для данных, которые может хранить ключ? Как я могу переопределить это?
<ч />
Второй вопрос: какой путь "лучше", код выше или следующий?
key = "%s_children" %(parent.name)
value = cache.get(key)
if value is None:
value = parent.children.all()
cache.set(key, value, CACHE_TIMEOUT)
Вторая версия не вызовет ошибок, если cache.set
не работает, так что это может быть обходной путь для моей проблемы, но , очевидно, не является решением.
В общем, давайте забудем о моей проблеме, какую версию вы бы посчитали "лучшей"?