Django Redis LPUSH / RPUSH

Rob*_*her 5 python django caching redis django-redis

我正在使用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)
Run Code Online (Sandbox Code Playgroud)

这种方法效率不高,因为整个列表都已加载到应用程序服务器的内存中。

Redis支持LPUSH / RPUSH命令以动态更新列表。但是,看起来这些方法在django缓存模块中不可用。

官方的python redis客户端似乎实现了这些方法。django不提供此实现有什么原因吗?我出于好奇而问。我可能错过了一些细节吗?

Dhr*_*hak 5

它确实支持原始客户端和命令访问,因此您必须获得对原始客户端的访问权限,而不是使用django缓存。

http://niwinz.github.io/django-redis/latest/#_raw_client_access

3.12。原始客户端访问在某些情况下,您的应用程序需要访问原始Redis客户端才能使用Django缓存接口未公开的某些高级功能。为了避免存储用于创建原始连接的其他设置,django-redis公开了一些函数,您可以使用这些函数重用缓存连接字符串来获取原始客户端: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)
Run Code Online (Sandbox Code Playgroud)