Redis缓存更新

时间:2015-07-13 22:43:39

标签: caching redis

EDIT2:澄清:代码ALREADY在未命中逻辑上有刷新缓存。我正在尝试做的是减少错过的缓存命中数。

我正在使用Redis作为API的缓存。这个想法是,当API接收到一个调用时,它首先检查缓存,如果数据不在缓存中,API将获取它并在下一次缓存它。

目前配置如下:

maxmemory 50mb
maxmemory-policy allkeys-lru

也就是说,使用最多50mb内存,继续尝试按键,当内存已满时,删除最近最少使用的密钥(lru)。

现在我想介绍第二类密钥。对于第二类,我将设定一定的到期时间。现在我想建立一个机制,当这些密钥到期时,这个机制会启动并刷新它们(并设置新的到期时间)。

我该怎么做?

编辑: 一些进展。事实证明,Redis有一个发布/订阅消息系统,特别是可以在事件上发送消息。其中一个是过期密钥,可以这样启用:

notify-keyspace-events Ex

我发现此代码可以描述阻止python process subscribing to Redis' messaging system。可以轻松更改它以检测密钥过期,并在密钥到期时调用API,然后API将刷新密钥。

def work(self, item):
    requests.get('http://apiurl/?q={param}'.format(param=item['data']))

所以这正是我所要求的。

通常,这种感觉太危险而且失控。我可以想象一些不同的情况,这种情况很快就会失败。

那么,什么是更好的解决方案?

2 个答案:

答案 0 :(得分:0)

要使密钥过期,只需使用Redis'内置的到期机制。您不需要在到期时刷新缓存内容,最简单的方法是在代码遇到缓存未命中时执行此操作。

答案 1 :(得分:0)

http://redis.io/topics/notifications

  

Keyspace通知允许客户订阅发布/订阅频道   以某种方式接收影响Redis数据集的事件。   可以接收的事件示例如下:

     

所有密钥在数据库0中到期。(例如)

...

  

当过期设置为密钥时,EXPIRE会生成过期事件,或   每次设置过期结果到密钥时过期的事件   被删除(有关详细信息,请参阅EXPIRE文档)。