2011-11-30 68 views
3

当我在具有特定过期时间(例如:10分钟)的Memcache中设置密钥?
如果我达到它,它会如何?如何在Memcache中缓存命中时过期?

我预计过期时间会再次更新10分钟。

如果不是什么解决方案来更新过期时间?

回答

3

所有存储操作都会过期,因此每次执行存储操作时都需要对其进行设置。

如果您使用的是最新版本的memcached,那么您可以选择使用touch和gat(get和touch)命令。触摸将允许您重置密钥的到期时间,gat将允许您获取密钥并重置到期。在这两种情况下,尽管您必须指定新的到期时间,因为memcached不会记住它。

1

为了减少touch()操作的次数,如果模块的API允许,可以在'flag'变量中保存到期时间。

根据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转换等等,所以您只能对简单数据使用标志(不是压缩的,也不是由您的库进行序列化)。