#python #django
Не получается закешировать данные. Делаю так (ctype.id=158, objects=[данные в QuerySet формате]): from django.core.cache import cache cached_objects = cache.get('top_rating_%s'%ctype.id) #вынимаем из кеша if cached_objects is None: #Если кеш пуст, то... #Тут манипуляция данными cache.set('top_rating_%s'%ctype.id, objects, time=1800) #Кладем в кеш значение objects return objects #Возвращаем objects else: return cached_objects #Возвращаем значение из кеша Пробовал перевести данные из типа QuerySet в list: ... objects = list(objects) #Преобразую cache.set('top_rating_%s'%ctype.id, objects, time=1800) #Кладу в кеш ... В обоих случаях в кеш ничего не сохранялось. Для проверки пробовал просто положить в кеш строку, все отлично сработало, в кеше значение прожило ровно столько, сколько указал во времени жизни.
Ответы
Ответ 1
Кеш он глупый, умеет хранить только базовые типы данных. Поэтому сложные структуры которые зависят от классов или типов указанных в приложении нужно сериализовать перед записью в кеш и десериализовать после. Сериализация объектов в Django Также можно воспользоваться модулем pickleОтвет 2
Видимо, все зависит от бэкенда, т.к. за сериализацию данных каждый бэкенд отвечает сам. К примеру, с memcache, приведенный выше код, должен работать, т.к. memcache не скалярные данные сериализует при помощи pickle. UPD. Проверил на django 1.3, python 2.7 - все бэкенды используемые в django автоматически сериализируют объекты, т.ч., видимо, у вас где-то ошибка.
Комментариев нет:
Отправить комментарий