在Django中使用Redis缓存如何获取Key的过期时间?
在Django中通过Redis缓存获取Key的过期时间
可以获取,但Django提供的通用缓存抽象层没有内置ttl或get_expire方法,你需要直接调用底层Redis客户端的原生命令来实现。
解决方法
- 如果你使用的是
django-redis作为缓存后端(最常用的Redis缓存适配库),可以这样获取:
from django.core.cache import cache # 获取底层Redis客户端实例 redis_client = cache.client.get_client() # 调用Redis原生ttl命令,返回剩余过期秒数 expire_seconds = redis_client.ttl('mykey')
- 如果你用的是Django 4.0+自带的
RedisCache后端(django.core.cache.backends.redis.RedisCache),则需要这样获取客户端:
from django.core.cache import cache redis_client = cache.client.connection expire_seconds = redis_client.ttl('mykey')
返回值说明
- 正数:key剩余的过期秒数
-1:key存在且永不过期-2:key不存在
封装成自定义方法
如果你想实现类似你期望的get_expire效果,可以封装一个工具函数:
from django.core.cache import cache def get_cache_expire(key): try: # 自动适配不同Redis缓存后端 if hasattr(cache.client, 'get_client'): redis_client = cache.client.get_client() else: redis_client = cache.client.connection ttl = redis_client.ttl(key) if ttl == -1: return None # 用None表示永不过期 elif ttl == -2: return 0 # key不存在返回0 return ttl except Exception: # 非Redis缓存后端时返回None return None
为什么你之前的代码报错?
Django的缓存抽象层为了兼容不同缓存后端(比如Memcached、文件缓存等),并没有统一暴露Redis特有的ttl方法,所以直接调用cache.ttl()会抛出AttributeError。必须通过底层客户端来调用Redis专属命令。
内容的提问来源于stack exchange,提问作者user19315471
相关产品推荐
相关产品推荐

