在运行时,我想检索有关memcached中某些项的过期时间信息。我没有在memcached上找到任何相关的接口。我可以这样做吗?类似于:mc.get_expire_time('key')
谢谢
Python memcache API不提供这样的功能。但是,您可以telnet到memcached以转储所有密钥和到期时间。
> telnet localhost 11211
stats items
显示包含您的数据的平板。
stats items
STAT items:12:number 1108
...
END
然后使用stats cachedump slab_id count
查看密钥和到期时间。将计数设置为0以检索所有键。
stats cachedump 12 1
ITEM abc [100 b; 1528336485 s]
END
令人讨厌的是,这些信息似乎只在slab stats中提供。从这开始:
[$]> (sleep 1; echo "stats cachedump 1 0"; sleep 1; echo "quit";) | telnet localhost 11211 | grep 'my_key'
并增加slab('cachedump'之后的第一个数字),直到找到合适的slab。一旦你得到一个结果,它将是形式
ITEM my_key [2 b; 1389767076 s]
那里的最后一个数字(在这种情况下为1389767076
)是密钥到期时的unixtime。您可以使用time.localtime()
将此数字转换为人类可读的内容,使用Python的Wolfram Alpha或使用https://github.com/memcached/memcached/wiki/BinaryProtocolRevamped#set-add-replace即时。
如果您对准确性不重要,我考虑过创建自己的客户端,通过二进制协议进行通信,并在ExtraLength的Flag字段中存储过期时间。 qazxswpoi
在这里,在8个字节的额外,最后四个是存储TTL,你可以使用前4个存储到期时间。当你把它拿回来时,它仍然在那个旗帜领域。
不利的一面是: