Джанго редис ЛПУШ / РПУШ
Я использую бэкэнд django-redis и модуль django.core.cache.cache. Модуль кэша django, похоже, не поддерживает надлежащую функциональность отправки в списки и манипулирования определенными структурами данных.
Подразумеваемая реализация, используемая для обновления списка в модуле кэша django:
my_list = cache.get('my_list')
my_list.append('my value')
cache.set('my_list', my_list)
Этот подход неэффективен, поскольку весь список загружается в память сервера приложений.
Redis поддерживает команды LPUSH / RPUSH для динамического обновления списка. Однако не похоже, что эти методы доступны в модуле кеширования django.
Официальный клиент Python Redis, кажется, реализует эти методы. Есть ли какая-то причина, по которой django не предложил бы эту реализацию? Я прошу из моего любопытства. Возможно, я пропустил некоторые детали?
1 ответ
Он поддерживает необработанный клиентский и командный доступ, для этого вам нужно будет получить доступ к необработанному клиенту вместо использования кеша django.
http://niwinz.github.io/django-redis/latest/
3.12. Доступ к необработанному клиенту В некоторых ситуациях вашему приложению требуется доступ к необработанному клиенту Redis, чтобы использовать некоторые расширенные функции, которые не предоставляются интерфейсом кэша Django. Чтобы избежать сохранения другого параметра для создания необработанного соединения, django-redis предоставляет функции, с помощью которых вы можете получить необработанный клиент, повторно использующий строку соединения кеша: get_redis_connection(псевдоним).
Пример кода:
>>> from django_redis import get_redis_connection
>>> con = get_redis_connection("default")
>>> con
<redis.client.StrictRedis object at 0x2dc4510>
>>> con.lpush('mylist',1)