Джанго редис ЛПУШ / РПУШ

Я использую бэкэнд 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)
Другие вопросы по тегам