6

我正在使用 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 有什么理由不提供这个实现?我是出于好奇而问的。可能我错过了一些细节?

4

1 回答 1

6

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

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

在某些情况下,您的应用程序需要访问原始 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)
于 2016-12-29T06:45:20.277 回答