SpringBoot怎么监听redis Key变化事件


今天小编给大家分享一下SpringBoot怎么监听redisKey变化事件的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。键空间通知使得客户端可以通过订阅频道或模式, 来接收那些以某种方式改动了 Redis key变化的事件。所有修改key键的命令。所有接收到 LPUSH key value [value …] 命令的键。db数据库中所有已过期的键。事件通过 Redis 的订阅与发布功能(pub/sub)来进行分发, 因此所有支持订阅与发布功能的客户端都可以在无须做任何修改的情况下, 直接使用键空间通知功能。因为 免费云主机域名Redis 目前的订阅与发布功能采取的是发送即忘(fire and forget)策略, 所以如果你的程序需要可靠事件通知(reliable notification of events), 那么目前的键空间通知可能并不适合你: 当订阅事件的客户端断线时, 它会丢失所有在断线期间分发给它的事件。未来将会支持更可靠的事件分发, 这种支持可能会通过让订阅与发布功能本身变得更可靠来实现, 也可能会在 Lua 脚本中对消息(message)的订阅与发布进行监听, 从而实现类似将事件推入到列表这样的操作。对于每个修改数据库的操作,键空间通知都会发送两种不同类型的事件。比如说,对0号数据库的键mykey执行DEL key [key …]命令时, 系统将分发两条消息, 相当于执行以下两个PUBLISH channel message命令:订阅第一个频道 __keyspace@0__:mykey 可以接收 0 号数据库中所有修改键 mykey 的事件, 而订阅第二个频道 __keyevent@0__:del则可以接收 0 号数据库中所有执行 del 命令的键。以 keyspace 为前缀的频道被称为键空间通知(key-space notification), 而以 keyevent 为前缀的频道则被称为键事件通知(key-event notification)。当 del mykey 命令执行时:键空间频道的订阅者将接收到被执行的事件的名字,在这个例子中,就是 del 。键事件频道的订阅者将接收到被执行事件的键的名字,在这个例子中,就是 mykey 。因为开启键空间通知功能需要消耗一些 CPU , 所以在默认配置下, 该功能处于关闭状态。可以通过修改 redis.conf 文件, 或者直接使用 CONFIG SET 命令来开启或关闭键空间通知功能:当 notify-keyspace-events 选项的参数为空字符串时,功能关闭。另一方面,当参数不是空字符串时,功能开启。notify-keyspace-events 的参数可以是以下字符的任意组合, 它指定了服务器该发送哪些类型的通知:输入的参数中至少要有一个K或者E, 否则的话, 不管其余的参数是什么, 都不会有任何通知被分发。举个例子, 如果只想订阅键空间中和列表相关的通知, 那么参数就应该设为Kl, 诸如此类。将参数设为字符串"AKE"表示发送所有类型的通知。每当一个键因为过期而被删除时,产生一个expired通知。每当一个键因为maxmemory政策而被删除以回收内存时,产生一个evicted通知。所有命令都只在键真的被改动了之后,才会产生通知。比如说,当SREM key member [member …]试图删除不存在于集合的元素时,删除操作会执行失败,因为没有真正的改动键,所以这一操作不会发送通知。如果对命令所产生的通知有疑问, 最好还是使用以下命令, 自己来验证一下:Redis 使用以下两种方式删除过期的键:当一个键被访问时,程序会对这个键进行检查,如果键已经过期,那么该键将被删除。底层系统会在后台渐进地查找并删除那些过期的键,从而处理那些已经过期、但是不会被访问到的键。
当过期键被以上两个程序的任意一个发现、 并且将键从数据库中删除时, Redis 会产生一个 expired 通知。Redis 并不保证生存时间(TTL)变为 0 的键会立即被删除: 如果程序没有访问这个过期键, 或者带有生存时间的键非常多的话, 那么在键的生存时间变为 0 , 直到键真正被删除这中间, 可能会有一段比较显著的时间间隔。因此, Redis 产生expired通知的时间为过期键被删除的时候, 而不是键的生存时间变为 0 的时候。按上文内容,我们先将redis的键空间通知开启,我们开启所有的通知,在可以端中测试后没问题再到代码中测试。连接到redis 输入一下命令 订阅键空间和键事件的主题创建一个 key :name valus:zhangsan观察订阅的窗口 会受到两个消息,第一个是:键空间 第二个是键事件,键空间是内容是操作指令,主题中包含有key,键事件主题中包含了指令,内容是key。到这里说明已经开启了键空间通知以下代码采用string类型演示在配置一下MessageListenerContainer类,将我们写好的监听类添加到该类中即可,删除和过期都是需要添加,我这里就一起添加了后面就不做演示。所以监听的主题都一样,实现MessageListener接口,重写onMessage这里就是收到消息的处理逻辑在redis中对name这个key进行set操作在控制台就可以看到name这个key被操作了跟上面的更新监听一样,只需要把订阅主题更改一下即可。同样需要添加到这个RedisMessageListenerContainer,上面已经添加,这里不做演示在redis输入命令,del name在控制台可以看到已经收到消息了。如上面的操作方式一样在redis中写一个定时删除的keySETEX age 18 3三秒后就可以控制台打印了相关信息以上就是“SpringBoot怎么监听redisKey变化事件”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注百云主机行业资讯频道。

相关推荐: php如何实现1到10的阶乘

这篇“php如何实现1到10的阶乘”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“php如何实现1到10的阶乘”文章吧。 php实现1到10的阶乘…

免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。

Like (0)
Donate 微信扫一扫 微信扫一扫
Previous 03/26 20:18
Next 03/26 20:18

相关推荐