You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 22:42:43