Is it possible to get key's expire time in Django using Redis cache?
Something like:
from django.core.cache import cache
cache.get_expire('mykey') # 300 (seconds)
I tried:
cache.ttl('my_key')
getting an error
AttributeError: 'RedisCache' object has no attribute 'ttl'
There is no official API to get TTL
from RedisCache
backend in Django (as of Django 4.2
); but we can customize the backend like -
# somefile.py
from functools import cached_property
from django.core.cache.backends.redis import (
RedisCache as _RedisCache,
RedisCacheClient as _RedisCacheClient,
)
class RedisCacheClient(_RedisCacheClient):
def ttl(self, key):
client = self.get_client(key)
return client.ttl(key)
class RedisCache(_RedisCache):
@cached_property
def _cache(self):
return RedisCacheClient(self._servers, **self._options)
def ttl(self, key, version=None):
key = self.make_and_validate_key(key, version=version)
return self._cache.ttl(key)
and then update your settings.py
# settings.py
CACHES = {
"default": {
"BACKEND": "path.to.new.custom.backend.RedisCache",
# other parameters and options
},
}
In [1]: from django.core.cache import cache
In [2]: cache.get("test")
In [3]: cache.set("test", "Foo", 30)
In [4]: cache.get("test")
Out[4]: 'Foo'
In [5]: cache.ttl("test")
Out[5]: 21
In [6]: cache.ttl("test")
Out[6]: 19
In [7]: cache.ttl("any-key")
Out[7]: -2