2016-09-16 285 views
2

我已经使用python脚本将值设置为外部的Redis服务器。Django Redis缓存值

r = redis.StrictRedis(host='localhost', port=6379, db=1) 
r.set('foo', 'bar') 

并尝试使用django cache在views.py中获取web请求的值。

from django.core.cache import cache 
val = cache.get("foo") 

它返回无。但是,当我试图获得它的形式

from django_redis import get_redis_connection 
con = get_redis_connection("default") 
val = con.get("foo") 

它正在返回正确的值'栏'。缓存和直接连接如何工作?

回答

2

库通常使用多个内部前缀来将密钥存储在redis中,以免误用用户定义的密钥。

例如,django-redis-cache为您保存的每个密钥加上“:1:”。

因此,例如,当您执行r.set('foo', 'bar')时,它将密钥设置为“:1:foo”。由于您不知道密钥的前缀,因此无法使用普通get获取密钥,您必须使用它自己的API才能获取密钥。

r.set('foo', 'bar') 

r.get('foo') # None 
r.get(':1:foo') # bar 

所以最终,它返回到您使用图书馆,去阅读它的代码,看看它究竟保存键。 redis-cli可以在这里成为您宝贵的朋友。基本上用cache.set('foo', 'bar')设置一个密钥,然后进入redis-cli并用'keys *'命令查看foo设置的密钥。

+0

谢谢。密钥存储在redis中是'foo'。当我设置使用Django缓存是像你说的存储。 “:1:foo”但是当我从cache.get('')得到它时,即使数据库中存在正确的密钥,也会返回null。 –

+0

@KareshArunakirinathan你的意思是使用* cache.get(“foo”)*返回None? – SpiXel