首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Redis缓存更新

Redis缓存更新
EN

Stack Overflow用户
提问于 2015-07-14 06:43:39
回答 2查看 7.3K关注 0票数 2

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

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

目前的配置如下:

代码语言:javascript
复制
maxmemory 50mb
maxmemory-policy allkeys-lru

也就是说,使用最多50mb存储器,继续尝试其中的密钥,且当存储器已满时,通过删除最近最少使用的密钥(lru)来开始。

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

我该怎么做呢?

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

代码语言:javascript
复制
notify-keyspace-events Ex

我发现这段代码可以描述一个阻塞的python process subscribing to Redis' messaging system。可以很容易地将其更改为检测密钥过期,并在密钥过期时调用API,然后API将刷新密钥。

代码语言:javascript
复制
def work(self, item):
    requests.get('http://apiurl/?q={param}'.format(param=item['data']))

所以这就是我所问的。

通常,这感觉太危险和失控。我可以想象一系列不同的情况,在这些情况下,这种方法很快就会失败。

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

EN

回答 2

Stack Overflow用户

发布于 2015-07-14 09:22:58

http://redis.io/topics/notifications

Redis Keyspace通知允许客户端订阅发布/订阅通道,以便接收以某种方式影响

数据集的事件。以下是可能接收的事件的示例:

数据库0中的所有密钥都已过期。(例如)

..。

EXPIRE在为密钥设置expire时生成expire事件,或者在每次设置expire导致密钥被删除时生成EXPIRE事件(有关更多信息,请参阅EXPIRE文档)。

票数 0
EN

Stack Overflow用户

发布于 2015-07-14 07:11:36

要使密钥过期,只需使用Redis内置的过期机制即可。您不需要在到期时刷新缓存内容,最简单的做法是在代码遇到缓存未命中时进行刷新。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31394739

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档