Django redis LPUSH/RPUSH

Django redis LPUSH / RPUSH

我正在使用 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 缓存模块中不可用。

官方的pythonredis客户端好像实现了这些方法。 django 有什么理由不提供这个实现吗?我是出于好奇才问的。可能我漏掉了一些细节?

它确实支持原始客户端和命令访问,因为您必须访问原始客户端而不是使用 django 缓存。

https://github.com/jazzband/django-redis#raw-client-access

In some situations your application requires access to a raw Redis client to use some advanced features that aren't exposed by the Django cache interface. To avoid storing another setting for creating a raw connection, django-redis exposes functions with which you can obtain a raw client reusing the cache connection string: get_redis_connection(alias).

代码示例:

>>> from django_redis import get_redis_connection
>>> con = get_redis_connection("default")
>>> con
<redis.client.StrictRedis object at 0x2dc4510>
>>> con.lpush('mylist',1)