1

使用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

4 回答 4

2

不幸的是,这是不可能的。当您使用LocMemCacheDjango 时,它会自行管理密钥及其到期日期,因此信息可用。另一方面,当您使用 memcached 时,Django 不会跟踪键。

此信息也无法通过 mamcached Python API 获得,因此如果您想访问此信息,您几乎必须自己跟踪它(即,每次保存某些内容时,在附加字典中保存每个键的到期日期到内存缓存)。

于 2013-10-08T19:01:06.450 回答
2

一个有点过时的答案,但为了社区的利益,我还是会发布。

我最近找到了一个 python 库来从 Memcache 服务器检索信息,在我的例子中它做到了:

https://github.com/ezubillaga/python-memcached-stats

(这是原始库的一个分支,支持 Python 3)

该库没有依赖项,只是一个带有几行代码的单个 python 文件,所以它变成了一个非常简洁和简单的解决方案来解决我的问题。方法 key_details 返回每个服务器平板上所有密钥的列表,包括每个密钥的大小和到期时间。

于 2016-08-10T14:41:57.893 回答
1

适用于本地主机(不适用于 memcached):

    from django.core.cache import cache    
    print cache._expire_info

我正在使用 python 2.7 和 Django 1.7。

于 2018-10-09T09:31:32.817 回答
0

_expire_info不幸的是,如果您像其他答案提到的那样使用 Memcached,则不可用。我最终这样做了,我在这里分享我的简单解决方案以帮助未来的读者:

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)

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

于 2020-04-25T18:28:09.347 回答