Django Redis缓存值

时间:2016-09-16 06:01:00

标签: django redis django-cache

我已使用python脚本在外部将值设置为Redis服务器。

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

并尝试使用views.py中的django缓存从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")

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

1 个答案:

答案 0 :(得分: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并使用'键*'进行检查。命令查看为 foo 设置的键。