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

问题描述 投票:8回答:4

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

谢谢

python memcached
4个回答
6
投票

根据memcache协议(textbinary)niether getgets返回到期时间。而且没有其他方法可以检索它。但是当你使set / add使它可以检索时,你肯定可以将到期时间与你现在存储的内容一起打包。


12
投票

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

7
投票

令人讨厌的是,这些信息似乎只在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即时。


0
投票

如果您对准确性不重要,我考虑过创建自己的客户端,通过二进制协议进行通信,并在ExtraLength的Flag字段中存储过期时间。 qazxswpoi

在这里,在8个字节的额外,最后四个是存储TTL,你可以使用前4个存储到期时间。当你把它拿回来时,它仍然在那个旗帜领域。

不利的一面是:

  • 编写自己的客户。
  • 您必须以本地时钟为基础来计算到期时间
  • 您只有4个字节来存储整数的到期时间。
© www.soinside.com 2019 - 2024. All rights reserved.