栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Redis通知:到期时获取密钥和值

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Redis通知:到期时获取密钥和值

Eli链接到的功能使您可以在密钥过期时进行监听。但是,它不能为您提供密钥的值。此外,基于已归档的github问题,您似乎无法期望很快就可以构建此功能(https://github.com/antirez/redis/issues/1876)。我使用的解决方案是创建一个特殊的“影子”过期密钥,该密钥链接到您具有实际值的密钥。

因此,假设您有一个名为的密钥

testkey
,它的整数值为
100
。此外,密钥将在10秒后过期,此时您要获取密钥的值。(也许您在存在的10秒钟内递增了密钥)。

首先,您需要设置侦听键空间事件。特别是您想听

expired
事件。您可以从配置中执行此操作,也可以
configset
在redis中使用命令。(有关更多信息,请参见此处:http :
//redis.io/topics/notifications)

ConFIG SET notify-keyspace-events Ex

现在,您可以订阅一个特殊的

keyevent
频道,在该频道中,您将收到有关密钥已过期的通知。

SUBSCRIBE __keyevent@0__:expired

要订阅的频道格式为

__keyevent@<db>__:<eventName>
。在我们的示例中,我们假设我们正在使用默认数据库0,并且我们想监听
expired
事件。

testkey
到期时,你现在会在收到一条消息,
__keyevent__
该消息是过期键的名称通道。当然,此时密钥已消失,因此我们无法再访问该值!解决方案是使用特殊的到期密钥。

创建时,

testkey
还创建一个特殊的“影子”密钥(不要使实际的密钥失效
testkey
)。例如:

SET testkey 100SET shadowkey:testkey "" EX 10

现在,在

__keyevent@0__:expired
频道中,您会收到一条消息,告诉您密钥
shadowkey:testkey
已过期。获取消息的值(这是键的名称),在冒号(或您决定使用的分隔符)上分割,然后手动获取并删除键的值。

// set your key valueSET testkey 100 //set your "shadow" key, note the value here is irrelevantSET shadowkey:testkey "" EX 10 // Get an expiration message in the channel __keyevent@0__:expired// Split the key on ":", take the second part to get your original key// Then get the value and do whatever with itGET testkey// Then delete the keyDEL testkey

请注意,没有使用shadowkey的值,因此您要使用尽可能小的值,该值为空字符串

""
。设置工作要多一些,但是上面的系统完全可以满足您的需求。开销是实际需要检索和删除密钥的一些额外命令,以及空密钥的存储成本。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/373994.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号