我已经使用 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")
它返回 None。但是当我试图从
中获取它时from django_redis import get_redis_connection
con = get_redis_connection("default")
val = con.get("foo")
它返回正确的值“bar”。缓存和直接连接如何工作?
最佳答案
库通常使用多个内部前缀将键存储在 redis 中,以免与用户定义的键混淆。
例如,django-redis-cache , 在您保存到其中的每个 key 前添加一个“:1:”。
例如,当您执行 r.set('foo', 'bar')
时,它会将键设置为“:1:foo”。由于您不知道您的 key 前面的前缀,您无法使用普通获取获取 key ,您必须使用它自己的 API 来获取。
r.set('foo', 'bar')
r.get('foo') # None
r.get(':1:foo') # bar
所以最后,它返回到你使用的库,去阅读它的代码,看看它是如何保存 key 的。 redis-cli 可以成为您宝贵的 friend 。基本上使用 cache.set('foo', 'bar')
设置一个键,然后进入 redis-cli
并使用 'keys *' 命令查看是什么键为 foo 设置。
关于Django Redis 缓存值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39524653/