Redis缓存更新

问题描述 投票:0回答:2

编辑2:澄清:代码已经在未命中逻辑上刷新缓存。我正在尝试做的是减少错过缓存命中的数量。

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

目前配置如下:

maxmemory 50mb
maxmemory-policy allkeys-lru

也就是说,最多使用 50mb 内存,不断尝试其中的键,当内存已满时,通过删除最近最少使用的键(lru)开始。

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

我该怎么做?

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

notify-keyspace-events Ex

我发现这段代码可以描述一个阻塞的python进程订阅Redis的消息系统。可以轻松更改它以检测密钥过期并在密钥过期时调用 API,然后 API 将刷新密钥。

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

所以这正是我所问的。

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

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

caching redis
2个回答
0
投票

http://redis.io/topics/notifications

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

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

...

EXPIRE 当键设置过期时生成过期事件,或者 每次将过期结果设置到密钥中时都会发生过期事件 被删除(有关更多信息,请参阅 EXPIRE 文档)。


-1
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.