我已使用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'。缓存和直接连接如何工作?
答案 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 设置的键。