2016-12-28 157 views
1

我正在使用django-redis后端和django.core.cache.cache模块。 Django缓存模块似乎不支持推送到列表和操作某些数据结构的正确功能。Django redis LPUSH/RPUSH

使用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是否有任何理由不提供这种实现?我在问我的好奇心。可能我错过了一些细节?

回答

2

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

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

3.12。原始客户端访问在某些情况下,您的应用程序需要访问原始Redis客户端才能使用Django缓存界面公开的不是 的一些高级功能。为避免存储另一个 设置以创建原始连接,django-redis公开了函数 ,通过该函数您可以获得重新使用缓存连接的原始客户端 string: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) 
+0

谢谢! @dhruvpathak –