Redis 入门:redis 中的 key 失效机制| 学习笔记

本文涉及的产品
云数据库 Tair(兼容Redis),内存型 2GB
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
简介: 快速学习 Redis 入门:redis 中的 key 失效机制。

开发者学堂课程【使用 Redis 消息队列完成秒杀过期订单处理 :Redis 入门:redis 中的 key 失效机制】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/729/detail/13015


Redis 入门:redis中的key失效机制

 

redis 中的 key 失效机制

当 key 失效的时候,会发送一些通知

可以通过订阅某一个主题,接收 key 失效的消息通知(此通知;

时 redis 内部的事件处理机制)

其实除了这种通知之外,在 redis 内部当发生一些事件的时候,它会自动的也会发送一些通知呢,比如说当 key 失效的时候才会发送。

在 redis 里面操作,像 redis 里面存储出来的时候可以指定 key 的失效时间,当这条数据失效了之后,Ready 立马向某一个主题已经发送一条通知,能够发送通知,

当我们订阅了一个消息时也会接收失效机制。

redis 内部的事件处理机制处理机制.当存储到 redis 某一个数据,key 失效的时候,K 失效的时候会自动的向某一个主题里面来发送一个消息,而这是 redis 的内容,进行的我们可以通过。通过订阅这个主题来检测我们发送的所有消息。

完成这个功能,需要两件事情

*i:开启事件通知(修改 redis 启动的配置文件)

*ii:需要订阅的主题名称:

这个主题名称写起来比较奇怪,首先是两个下划线,

__keyevent@dbindex 后面是一个事件。

内部有十六个小的数据库,具体监听哪个仓库里K的变化

__keyevent@dbindex __:expired

:存储到的 redis 服务器:0号数据库

订阅的主题:__keyevent@dbindex __:expired  代表的就是0号数据库。

知道如果想要得到key失效的一个通知,需要干两件事。第一个开启事件的通知,这个事件通知就需要去修改 redis 启动的文件。Redis 启动文件在 redis 安装目录里找到。

启动配置文件:redis.windows.conf

右键点击打开文件,对于要修改的参数,

control F 查找目标:notify

找到 notify-keyspace-event 需要将它设计成 ex,设置成功后需要重新启动 redis 服务器,先 crtl C 关闭 redis 服务器再重新启动。

E: \Redis-x64-2.8.2103>redis-server.exe redis-windows.conf

前面是启动的命令,后面是指定启动的配置文件。

image.png

2、订阅主题

打开一个客户端程序,开始订阅某个消息,存储的信息都放到0号仓库里。

127.0.0.1:6379> subscribe keyevent@o_:expired

Reading messages..

.(press Ctri-C to quit)

"subscribe"

“keyevent@o__:expired"

(integer) 1

以上就完成订阅,之前解释过,订阅的是0号仓库里 key 失效通知,目前0号仓库里没有数据,再打开一个 redis 服务器客户端:

Redis-cli.exe

在其中设置一个值,

127.0.0.1:6379> set testKey "test"ok

127.0.0.1:6379>expire testKey 5-

上面这句话的意思就是将test的失效事件设置为五秒。五秒钟之后就会从redis服务器里面消除,也就是失效。

.127.0.0.1:6379>expire testKey 5

127.0.0.1:6379>ttl testKey

(integer) -2

127.0.0.1:6379>

-2表示当前的 testkey 已经失效了。

127.0.0.1:6379> subscribe keyevent@o_:expired.Reading messages...(press Ctri-c to quit)

1"subscribe"

2)”keyevent@0__:expired"3(integer)1

"message'

2“keyevent@o :expired3)"testKey"

马上就接收到了一个信息。0号仓库里有个 KEY 值失效了,这个 key 值叫做 testkey。

主要的目的就是通过 redis 来处理代金卷的一些过期问题,通过消息服务器来通知我们的 java 代码。某一个订单失效了。然后再进行修改,设置订单失效的状态。那么是否可以借助 redis 中的 key 失效通知,也就是说用户在获取到一个优惠卷的时候,就将优惠卷信息保存到 redis 服务器中,兵器设置超时时间。

当 redis 中数据失效时,就会发送一条消息通知接收到失效的消息通知,在 Java 代码端处理。

目前,一些前置性的信息已经讲解完毕,借用的就是 redis 中的一些消息通知,要完成的功能,当用户获取优惠卷的时候,将优惠卷信息放到 redis 服务器中,并且设置 redis 用户的一个失效时间,失效时间全部放置到 redis 服务器中,当 redis 中数据失效时,会自动发送一条消息通知,可以订阅这个消息,订阅这个消息就能够接收到当前的数据,接收之后就可以处理数据库中的消息,修改它的失效状态。

相关文章
|
6天前
|
NoSQL 算法 Redis
【Docker】(3)学习Docker中 镜像与容器数据卷、映射关系!手把手带你安装 MySql主从同步 和 Redis三主三从集群!并且进行主从切换与扩容操作,还有分析 哈希分区 等知识点!
Union文件系统(UnionFS)是一种**分层、轻量级并且高性能的文件系统**,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下(unite several directories into a single virtual filesystem) Union 文件系统是 Docker 镜像的基础。 镜像可以通过分层来进行继承,基于基础镜像(没有父镜像),可以制作各种具体的应用镜像。
102 5
|
5月前
|
缓存 NoSQL 算法
Redis数据库的键值过期和删除机制
我们需要注意的是,虽然Redis提供了这么多高级的缓存机制,但在使用过程中,必须理解应用的特性,选择合适的缓存策略,才能最大化Redis的性能。因此,在设计和实施应用程序时,理解应用的数据访问模式,以及这些模式如何与Redis的缓存机制相互作用,尤为重要。
197 24
|
7月前
|
缓存 NoSQL Java
Redis应用—6.热key探测设计与实践
热key问题在高并发系统中可能导致数据层和服务层的严重瓶颈,如Redis集群瘫痪和用户体验下降。为解决此问题,京东开发了JdHotkey热key探测框架,具备实时性、准确性、集群一致性和高性能等特点。该框架由etcd集群、Client端jar包、Worker端集群和Dashboard控制台组成,通过分布式计算快速识别热key并推送至应用内存,有效减轻数据层负载,提升服务性能。JdHotkey适用于多种场景,安装部署简便,支持毫秒级热key探测和集群一致性维护。
338 61
Redis应用—6.热key探测设计与实践
|
4月前
|
NoSQL 测试技术 Redis
Redis批量删除Key的三种方式
Redis批量删除Key是优化数据库性能的重要操作,本文介绍三种高效方法:1) 使用通配符匹配(KEYS/SCAN+DEL),适合不同数据规模;2) Lua脚本实现原子化删除,适用于需要事务保障的场景;3) 管道批量处理提升效率。根据实际需求选择合适方案,注意操作不可逆,建议先备份数据,避免内存溢出或阻塞。
|
9月前
|
NoSQL API Redis
在C程序中实现类似Redis的SCAN机制的LevelDB大规模key分批扫描
通过上述步骤,可以在C程序中实现类似Redis的SCAN机制的LevelDB大规模key分批扫描。利用LevelDB的迭代器,可以高效地遍历和处理数据库中的大量键值对。该实现方法不仅简单易懂,还具有良好的性能和扩展性,希望能为您的开发工作提供实用的指导和帮助。
135 7
|
11月前
|
消息中间件 缓存 NoSQL
Redis 高并发竞争 key ,如何解决这个难点?
本文主要探讨 Redis 在高并发场景下的并发竞争 Key 问题,以及较为常用的两种解决方案(分布式锁+时间戳、利用消息队列)。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
Redis 高并发竞争 key ,如何解决这个难点?
|
11月前
|
存储 监控 NoSQL
Redis大Key问题如何排查?如何解决?
Redis大Key问题如何排查?如何解决?
460 0
Redis大Key问题如何排查?如何解决?
|
11月前
|
存储 NoSQL 算法
面试官:Redis 大 key 多 key,你要怎么拆分?
本文介绍了在Redis中处理大key和多key的几种策略,包括将大value拆分成多个key-value对、对包含大量元素的数据结构进行分桶处理、通过Hash结构减少key数量,以及如何合理拆分大Bitmap或布隆过滤器以提高效率和减少内存占用。这些方法有助于优化Redis性能,特别是在数据量庞大的场景下。
面试官:Redis 大 key 多 key,你要怎么拆分?
|
缓存 运维 NoSQL
收藏的博客 -- Redis学习
收藏的博客 -- Redis学习
192 0
|
5月前
|
缓存 NoSQL 关系型数据库
美团面试:MySQL有1000w数据,redis只存20w的数据,如何做 缓存 设计?
美团面试:MySQL有1000w数据,redis只存20w的数据,如何做 缓存 设计?
美团面试:MySQL有1000w数据,redis只存20w的数据,如何做 缓存 设计?