在Memcache中点击缓存的过期时间怎么样?

时间:2011-11-30 18:25:04

标签: memcached

当我在Memcache中设置一个具有特定过期时间的密钥(例如:10分钟)? 如果我到达它怎么样?

  

我希望过期的时间会再次更新10分钟。

如果没有更新过期时间的解决方案是什么?

2 个答案:

答案 0 :(得分:3)

所有商店操作都会过期,因此您需要在每次进行商店操作时进行设置。

如果您使用的是最新版本的memcached,则可以选择执行touch和gat(get and touch)命令。 touch将允许您只重置密钥的到期时间,gat将允许您获取密钥并重置到期日期。在这两种情况下,您必须指定新的到期时间,因为memcached将不记得它。

答案 1 :(得分:1)

为了最大限度地减少touch()操作的次数,您可以将过期时间保存在'标记'变量,如果模块的API允许这样做。

根据https://github.com/memcached/memcached/blob/master/doc/protocol.txt标志通过SET操作保存

 set <key> <flags> <exptime> <bytes> [noreply]\r\n

可以通过GET操作得到:

 get <key>*\r\n

 Each item sent by the server looks like this:

 VALUE <key> <flags> <bytes> [<cas unique>]\r\n <data block>\r\n

即。无论你想要什么,你随时都可以得到FLAGS) 所以我的建议是使用FLAGS检查过期时间是否足够,并且只在真正需要时进行触摸,而不是每次进行GET时都进行触摸。

在这样的方案中,你不能再做TOUCH了(因为这不会改变存储在标志中的过期时间),但是应该使用CAS来设置新的VALUE和FLAGS。

请注意,大多数时候高级库(perl,php等)使用FLAGS来满足需求,例如保存数据是否被压缩,序列化,从UTF-8转换等等,所以你可以仅将标志用于简单数据(未压缩且未经过库序列化)。