开发者学堂课程【使用 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
前面是启动的命令,后面是指定启动的配置文件。
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 中数据失效时,会自动发送一条消息通知,可以订阅这个消息,订阅这个消息就能够接收到当前的数据,接收之后就可以处理数据库中的消息,修改它的失效状态。