在运行时,我想检索有关memcached中某些项的过期时间信息。我没有在memcached上找到任何相关的接口。我可以这样做吗?就像是: mc.get_expire_time( '钥匙')
谢谢
答案 0 :(得分:12)
Python memcache API不提供此类功能。但是,您可以远程登录到memcached以转储所有密钥和到期时间。
> telnet localhost 11211
stats items
显示包含您数据的版块。
stats items
STAT items:12:number 1108
...
END
然后使用stats cachedump slab_id count
查看密钥和到期时间。将count设置为0以检索所有键。
stats cachedump 12 1
ITEM abc [100 b; 1528336485 s]
END
答案 1 :(得分:6)
令人讨厌的是,这些信息似乎只在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()
或使用Wolfram Alpha即时将此数字转换为人类可读的内容。
答案 2 :(得分:5)
根据memcache协议(text和binary)niether get
和gets
返回到期时间。而且没有其他方法可以检索它。但是,当您set
/ add
使其可以检索时,请确保您可以将到期时间与您现在存储的内容一起打包。
答案 3 :(得分:0)
如果您对准确性不是很严格,我曾考虑过创建自己的通过二进制协议进行对话的客户端,并将到期时间存储在ExtraLength的Flag字段中。 https://github.com/memcached/memcached/wiki/BinaryProtocolRevamped#set-add-replace
在这里,在额外的8个字节中,后四个存储TTL,您可以使用前四个存储到期时间。而当您取回它时,它仍然在该标志字段中。
它的缺点是: