Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Django Redis cache values

I have set the value to Redis server externally using python script.

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

And tried to get the value from web request using django cache inside views.py.

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

It is returning None. But when I tries to get it form

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

It is returning the correct value 'bar'. How cache and direct connections are working ?

like image 626
Karesh A Avatar asked Mar 02 '26 00:03

Karesh A


1 Answers

Libraries usually use several internal prefixes to store keys in redis, in order not to be mistaken with user defined keys.

For example, django-redis-cache, prepends a ":1:" to every key you save into it.

So for example when you do r.set('foo', 'bar'), it sets the key to, ":1:foo". Since you don't know the prefix prepended to your key, you can't get the key using a normal get, you have to use it's own API to get.

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

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

So in the end, it returns to the library you use, go read the code for it and see how it exactly saves the keys. redis-cli can be your valuable friend here. Basically set a key with cache.set('foo', 'bar'), and go into redis-cli and check with 'keys *' command to see what key was set for foo.

like image 134
SpiXel Avatar answered Mar 03 '26 22:03

SpiXel



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!