如何从缓存中获取到期时间

时间:2013-10-08 18:42:45

标签: python django caching memcached

使用 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的方式来获取指定密钥的到期时间?

4 个答案:

答案 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)

如果您像其他答案中提到的那样使用Memcached,则

_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)

这样,您以后就可以获取缓存密钥的到期时间戳。也许有更好的解决方案,但是我使用了这种简单的方法。