如何获取memcached中特定项的到期时间

时间:2010-04-01 07:10:36

标签: python memcached

在运行时,我想检索有关memcached中某些项的过期时间信息。我没有在memcached上找到任何相关的接口。我可以这样做吗?就像是: mc.get_expire_time( '钥匙')

谢谢

4 个答案:

答案 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协议(textbinary)niether getgets返回到期时间。而且没有其他方法可以检索它。但是,当您set / add使其可以检索时,请确保您可以将到期时间与您现在存储的内容一起打包。

答案 3 :(得分:0)

如果您对准确性不是很严格,我曾考虑过创建自己的通过二进制协议进行对话的客户端,并将到期时间存储在ExtraLength的Flag字段中。 https://github.com/memcached/memcached/wiki/BinaryProtocolRevamped#set-add-replace

在这里,在额外的8个字节中,后四个存储TTL,您可以使用前四个存储到期时间。而当您取回它时,它仍然在该标志字段中。

它的缺点是:

  • 写自己的客户。
  • 您必须基于本地时钟来计算到期时间
  • 您只有4个字节以整数形式存储到期时间。