redis的数据库通知(notify-keyspace-events)

共分为两类:一类是键空间通知 另一类是键事件通知

概述

数据库通知是redis在2.8之后新增的功能,让客户端可以已发布/订阅模式来获取数据库中键的变化以及某事件的发生

  • 首先要知道这个发送通知的操作是占内存的,所以默认的关闭的,需要我们手动的在redis.conf里面进行开启
  • 如何开启:
    • 进入redis安装地址的/redis/etc文件下,vim redis.conf
    • 找到notify-keyspace-events,默认为“”,这里需要进行配置,配置完就开启了
    • K Keyspace events, published with keyspace@ prefix.
      E Keyevent events, published with keyevent@ prefix.
      g Generic commands (non-type specific) like DEL, EXPIRE, RENAME, …
      $ String commands
      l List commands
      s Set commands
      h Hash commands
      z Sorted set commands
      x Expired events (events generated every time a key expires)
      e Evicted events (events generated when a key is evicted for maxmemory)
      A Alias for g$lshzxe, so that the “AKE” string means all the events.
    • K和E是必须要选一个配的,不行就配置AKE,表示所有的事件和键变化都会发送两条通知

开启后:

开启后能接收到的类型只有两种:keyspace和keyevent

前者为事件的具体操作,后者为事件影响的键名

  1. 数据库0中删除一个叫mykey的键 127.0.0.1:6379> del mykey
  2. 数据库0会发布下面两条信息:
    • public keyspace@0:mykey del (键空间信息,mykey键被删了)
    • public keyevent@0:del mykey (事件空间信息,执行了删除事件,删除了mykey)

redis发布后我们如何接受呢

项目中配置了redis.conf,redisListenerConfig之后

编写个 RedisKeyExpirationListenerServer 类继 KeyExpirationEventMessageListener

然后实现他的doRegister方法和onMessage方法

主要就是doRegister里面你进行订阅的topic是啥

  • 想要订阅键空间就是 __keyspace,具体哪个键就后面@再加上键的key,如user,key a,key b等等。
  • 想要订阅键事件就是__keyevent,具体哪个事件就后面@再加上事件的操作,如del ,set ,expire等

如何接收实例:

我的需求是当设置的某个键过期的时候,我这边能接收到这个事件,所以这里我接收的是keyevent@0__:expired这个topic

  • 监听类的doRegister和onmessage方法
  • doregister就是监听keyevent(键事件通知)中的expired事件
    • tring topic = “keyevent@“+database+”:expired”;
  • onMessage就是获取到这个过期的键的详情,直接message.toString就可以获取到这个过期键的key(这里要注意,message里面获取不到该过期键的value)
    • String expiredKey = message.toString();
 @Overrideprotected void doRegister(RedisMessageListenerContainer listenerContainer) {String topic = "__keyevent@"+database+"__:expired";log.info("配置监听哪个频道:"+topic);PatternTopic patternTopic = new PatternTopic(topic);// 频道可以是多,多个传listlistenerContainer.addMessageListener(this,patternTopic);}@Overridepublic void onMessage(Message message, byte[] pattern) {// 用户做自己的业务处理即可,注意message.toString()可以获取失效的keyString expiredKey = message.toString();log.info("失效的key"+expiredKey);if(expiredKey.contains(RedisContact.SERVERNAME)){deal(expiredKey);}

redis的数据库通知(notify-keyspace-events)相关推荐

  1. 键空间通知(keyspace notification)

    Redis键空间通知(keyspace notification) 本文档翻译自: http://redis.io/topics/notifications . 键空间通知功能目前仍在开发中,这个文档 ...

  2. Redis键空间通知(Keyspace Notifications)

    Redis Keyspace Notifications https://redis.io/topics/notifications Redis 是一个键值对数据库服务器,服务器中每个数据库都由 re ...

  3. Redis的事件通知

    Redis的事件通知通过发布/订阅模式来实现的. 事件通知分为两种: keyspace 和 kevevent. keyspace称为键空间通知,格式为 __keyspace@DB__:KeyPatte ...

  4. Redis——单机数据库的实现

    数据库 Redis服务器将所有数据库都保存在服务器状态redis.h/redisServer结构的db数组中 db数组的每个项都是一个redis.h/redisDb结构 每个redisDb结构代表一个 ...

  5. redis实现数据库(一)

    转:https://www.cnblogs.com/beiluowuzheng/p/9738159.html 服务器中的数据库 Redis服务器将所有数据库都保存在服务器状态redis.h/redis ...

  6. Redis (二) 数据库

    前言 本文基于 黄建宏-<Redis设计与实现>总结.第二部分为Redis 数据库,RDB持久化,AOF持久化,事件,客户端,服务器 目录 前言 数据库 服务器中的数据库 服务器数据库示例 ...

  7. 虹科干货|Redis企业版数据库为企业「数据安全」叠加最强Buff!

    虹科干货|Redis企业版数据库为企业「数据安全」叠加最强Buff! "这是一场可预见的噩梦!" 近期,黑客通过攻击亚洲最大两家数据中心-万国数据和新科电信媒体,获取国际巨头企业的 ...

  8. Redis缓存数据库

    目录 NoSQL NoSQL特点 常见的NoSQL数据库 redis MongoDB 行式存储数据库 列式存储数据库 redis简介 安装redis redis启动服务 前台启动 提取信息 后台启动 ...

  9. Redis与数据库的爱恨纠葛

    Redis 是完全开源的,遵守 BSD 协议,是一个高性能的 key-value 数据库. 早期数据库只要有数据库的操作---增--删--改--查 当用户量特别多的情况下,数据库的数量一定是跟不上用户 ...

最新文章

  1. safari快捷图标不见了_Win7桌面图标不见了怎么办?附解决办法
  2. js pug 代码_用JS写的windows95操作系统
  3. 我的2015学习总结及2016的技术规划(2016.02)
  4. BCompare日志
  5. Oracle 常用命令举例
  6. uniapp 封装网络请求
  7. web靶机:kali linux 2.0下搭建DVWA渗透测试演练平台
  8. python爬虫基础扫盲之urllib.pase解析URL
  9. 【codeforces 799A】Carrot Cakes
  10. CentOS7系统服务管理systemctl
  11. 记录一个Lock和sychronized应用及双检锁
  12. NSURLConnect 的简单实用(iOS8淘汰)
  13. 【生物信息学】外显子测序的原理及优缺点
  14. 教你用GoldWave剪裁音频作短视频BGM
  15. 运算放大器:加法电路
  16. JavaScript测试题
  17. 计算机专业英语名词(复试)
  18. 计算机R3处理器,电脑r3处理器好不好
  19. 超声波模块测距 Arduino代码
  20. MySQL 重置 root 密码以及修改密码时报错password字段不存在

热门文章

  1. python-shutil对文件的移动,重命名,和删除,压缩
  2. java字符串同构_Java同构代码
  3. fiddler mac教程_Mac os 安装fiddler
  4. 导航路径规划之四 路径规划概述
  5. word替换功能 如何将相同的内容,替换为依次排列的数字编号
  6. 视觉SLAM十四讲——第四讲李群与李代数
  7. Linux I/O编程
  8. iReport与JasperReport中如何支持文支持显示
  9. React + Taro 小程序跳转公众号
  10. 你是哪一型---左右脑性格测试(转)