使用 django.core.cache.backends.locmem.LocMemCache 这有效:
key = cache.make_key('foo')
cache.validate_key(key)
t = cache._expire_info.get(key)
但它打破了 django.core.cache.backends.memcached.MemcachedCache
我收到错误:'MemcachedCache'对象没有属性'_expire_info'
是否有通用或特定于memcached的方式来获取指定密钥的到期时间?
答案 0 :(得分:2)
不幸的是,这是不可能的。当您使用LocMemCache
时,Django会自行管理密钥及其到期日期,因此信息可用。另一方面,当你使用memcached时,Django不会跟踪密钥。
这个信息也不能通过mamcached Python API获得,所以如果你想要访问这些信息,你几乎必须自己跟踪它(即每次为另一个字典中的每个键保存一个到期日期)你把东西保存到memcached)。
答案 1 :(得分:2)
有点过时的答案,但无论如何我都会为了社区的利益而张贴。
我最近发现了一个python库,用于从Memcache服务器中检索信息,在我的例子中,这样做了诀窍:
https://github.com/ezubillaga/python-memcached-stats
(这是来自原始库的Python,支持Python 3)
库没有依赖关系,只是一个包含几行代码的python文件,所以它变成了一个非常简洁的解决方案来解决我的问题。 key_details方法返回每个服务器slab上所有键的列表,包括每个键的大小和到期时间。
答案 2 :(得分:0)
这对我在localhost中有效(对memcached无效):
from django.core.cache import cache
print cache._expire_info
我正在使用python 2.7和Django 1.7。
答案 3 :(得分:0)
_expire_info
不可用。我结束了这一步,在这里分享了我的简单解决方案,以帮助将来的读者:
from django.core.cache import cache
import time
cachekey = 'somerandomkey'
cacheexpkey = '%s-exp' % cachekey
data = {'name': 'John Doe'}
cache.set(cachekey, data, 3600)
cache.set(cacheexpkey, int(time.time()) + 3600)
这样,您以后就可以获取缓存密钥的到期时间戳。也许有更好的解决方案,但是我使用了这种简单的方法。