发布与订阅

1. 服务器状态在pubsub_channels字典保存了所有频道的订阅关系:SUBSCRIBE命令负责将客户端和被订阅的频道关联到这个字典里面,而UNSUBSCRIBE命令则负责

解除客户端和被退订频道之间的关联。

2. 服务器状态在pubsub_patterns链表保存了所有模式的订阅关系:PSUBSCRIBLE命令负责将客户端和被订阅的模式记录到这个链表中,而PUNSBUSCRIBLE命令则负

责移除客户端和被退订模式在链表中的记录。

3. PUBLISH命令通过访问pubsub_channels字典来向频道的所有订阅者发送消息,通过访问pubsub_patterns链表来向所有匹配频道的模式的订阅者发消息。

4. PUBSUB命令的三个子命令都是通过读取pubsub_channels字典和pubsub_patterns链表中的信息来实现的。

5. 链表统一来管理订阅者。

事务

1. 事务提供了一种将多个命令打包,然后一次性、有序执行的机制

2. 多个命令被入队到事务队列中,然后按先进先出的顺序执行

3. 事务在执行过程中不会被中断,当事务队列中的所有命令都被执行完毕之后,事务才会结束。

4. 带有WATCH命令的事务会将客户端和被监控的键在数据库的watch_keys字典中进行关联,当键被修改时,程序会将所有监视被修改键的客户端的REDIS_DIRTY_CAS标志打开。

5. 只有在客户端的REDIS_IDRTY_CAS标志未被打开时,服务器才会执行客户端提交的事务,否则的话,服务器将拒绝执行客户端提交的事务。

6. Redis事务总是具有ACID中的原子性、一致性和隔离性,当服务器运行在AOF持久化模式下,并且appendfsync选项值为always时,事务也具有耐久性。

7. Redis通过MULTI、EXEC、WATCH等命令来实现事务功能。事务提供了一种将多个命令请求打包,然后一次性、按顺序地执行多个命令的机制,并且在事务执行期间,服务器

不会中断事务而去执行其他客户端请求,它会将事务中的所有命令都执行完。然后才会去处理其他客户端的命令请求。

8. 一个事务从开始到结束通常会经历一下三个阶段:

1). 事务开始:MULTI

2). 命令入队:

3). 事务执行:EXEC

9. 客户端切换到事务状态后,服务器会根据这个客户端发来的不同命令执行不同的操作:

1). 如果发的命令为:EXEC、DISCARD 、WATCH 、MULTI 四个命令中的一个,那么服务器立即执行这个命令

2). 如果不是上面几条命令,那么服务器并不会立即执行这个命令,而是将这个命令放入一个事务队列中,然后向客户端返回QUEUED回复。

10. WATCH命令是一个乐观锁,他可以在EXEC命令执行之前,监视任意数量的数据库键,并在EXEC命令执行时,检查被监视的键是否至少有一个已经被修改过了,如果是的话,服务器将拒绝执行事务。

      并向客户端返回代表事务执行失败的空回复。

11. 监视机制的触发:为被监视的键设置一个属性值,当被监视的键被修改时,改变属性,标记该键已被修改。事务执行前,检查该属性值。(思想)

12. Redis 不支持事务回滚机制,即使事务队列中的某个命令在执行期间出现了错误,整个事务也会继续执行下去,直到将事务队列中的所有命令都执行完毕为止。

13. ACID : 

原子性(Atomicity):数据库将事务中的多个操作当做一个整体来执行,服务器要么执行事务中所有的操作,要么就一个操作都不执行。Redis事务是原子性的,但不保证所有执行命令都成功。

一致性(Consistency) : 如果数据库在执行事务之前是一致的,那么在事务执行之后,无论事务是否执行成功,数据库也应该仍然是一致的。

隔离性(Isolation): 即使数据库有多个事务并发执行,各个事务之间也不会互相影响,并且在并发状态下执行的事务和串行执行的事务产生的结果完全相同。Redis使用单线程的方式来执行事务。

持久性(Durability):当一个事务执行完毕时,执行这个事务所得的结果已经被保存到永久性介质(比如磁盘)里面了,即使服务器在事务执行完毕之后停机,执行事务所得的结果也不会丢失。

慢查询日志

1. Redis的慢查询日志功能用于记录执行时间超过指定时长的命令。用户可以通过这个功能产生的日志来监控和优化查询速度。

2. Redis服务器将所有的慢查询日志保存在服务器状态的slowlog链表中,每个链表节点都包含了一个slowlogEntry结构,每个slowlogEntry结构代表一个慢查询日志。

3. 打印和删除慢查询日志可以通过遍历slowlog链表来完成。

4. slowlog链表的长度就是服务器所保存慢查询日志的数量。

5. 新的慢查询日志会被添加到slowlog链表的表头,如果日志的数量超过slowlog-max-len选项的值,那么多出来的日志会被删除。

6. 服务器配置有两个和慢查询日志相关的选项:

1). slowlog-log-slower-than选项指定执行时间超过多少微秒的命令请求会被记录到日志上。

2). slowlog-max-len选项指定服务器最多保存多少条慢查询日志。服务器使用先进先出的方式保存多条慢查询日志,当服务器存储的慢查询日志数量等于slowlog-max-len选项的值时,服务器在添加

一条新日志前,会现将旧的一条慢查询日志删除。

7. 使用SLOWLOG GET 命令查看服务器所保存的慢查询日志

8. 添加新日志:在每次执行命令之前和之后,程序都会记录微秒格式的UNIX时间戳,这两个时间戳之间的差就是服务器执行命令所耗费的时长,服务器根据这个时长决定是否保存这条查询日志。

监视器:

1. 客户端通过执行MONITOR命令,将客户端转换成监视器,接收并打印服务器处理每个命令请求的相关信息。

2. 当一个客户端从普通客户端变成监视器时,该客户端的REDIS_MONITOR标识会被打开。

3. 服务器将所有监视器都记录在monitors链表中。

4. 每次处理命令请求时,服务器都会遍历monitors链表,将相关信息发送给监视器。

转载于:https://www.cnblogs.com/Jtianlin/p/5119750.html

redis 笔记06 发布与订阅、事务、慢查询日志、监视器相关推荐

  1. 【Redis笔记】发布与订阅

    Redis发布与订阅功能由PUBLISH,SUBSCRIBE,PSUBSCRIBE等命令组成. [SUBSCRIBE命令] 客户端可以订阅一个或多个频道,从而成为这些频道的订阅者(subscriber ...

  2. StackExchange.Redis学习笔记(五) 发布和订阅

    StackExchange.Redis学习笔记(五) 发布和订阅 原文:StackExchange.Redis学习笔记(五) 发布和订阅 Redis命令中的Pub/Sub Redis在 2.0之后的版 ...

  3. Redis中的发布与订阅

    redis中实现发布与订阅相对于zookeeper非常简单.直接使用publish和subscribe就行. subscrible news; 订阅news这个channel publish news ...

  4. nodejs 实现 redis 的消息发布及订阅

    nodejs 实现 redis 的消息发布及订阅 业务需求 实现方法(koa) 流程 业务需求 大家好,我终于踩坑了哈哈哈哈--- 如果服务器是单线程的话 消息推送完全可以用websocket来实现, ...

  5. idea springboot 发布webservice 发布服务_太赞了:Spring boot+redis实现消息发布与订阅...

    一.创建spring boot项目 org.springframework.boot spring-boot-starter-data-redis org.springframework.boot s ...

  6. nodejs redis 发布订阅_太赞了:Spring boot+redis实现消息发布与订阅

    一.创建spring boot项目 org.springframework.boot spring-boot-starter-data-redis org.springframework.boot s ...

  7. Redis中的发布与订阅的概念与以命令行的方式实现发布订阅举例

    场景 什么是发布与订阅 发布订阅是一种应用程序(系统)之间通讯,传递数据的技术手段,特别是在异构(不同语言)系统之间的作用非常明显. 发布订阅: 类似于微信中关注公众号/订阅号,公众号/订阅号发布的文 ...

  8. redis 发布订阅实际案例_【赵强老师】Redis的消息发布与订阅

    欢迎关注赵强老师微信公众号:myitshare Redis 作为一个publish/subscribe server,起到了消息路由的功能.订阅者可以通过subscribe和psubscribe命令向 ...

  9. nodejs redis 发布订阅_「赵强老师」Redis的消息发布与订阅

    Redis 作为一个publish/subscribe server,起到了消息路由的功能.订阅者可以通过subscribe和psubscribe命令向Redis server订阅自己感兴趣的消息类型 ...

最新文章

  1. pat1004. Counting Leaves (30)
  2. HDU 4712 Hamming Distance(随机算法)
  3. eclipse 导出项目到 android studio .so 库
  4. 【Android 安装包优化】WebP 图片格式兼容与性能 ( Android 中的 WebP 图片格式兼容问题 | Android 中的 WebP 图片格式性能 )
  5. 雅客EXCEL(5)-tab键、同组数据录入、提取重复值、提取身份证号码的出生日期
  6. logstash filter grok 用法
  7. [画图]几何图形绘制测试
  8. MySQL赋权navicat_mysql 的root 用户无法授权及解决navicat 远程授权提示1044问题
  9. Pytest脚本中运行用例方式
  10. Java Iterable类
  11. rewrite伪静态
  12. PHP技术亮点,我眼里的THINKPHP5新亮点(1)
  13. Spring 自带的一些工具类
  14. 二叉树的遍历实验报告C语言,数据结构-二叉树的遍历(类C语言描写叙述)
  15. 位CPU和64位CPU 区别
  16. 远程桌面服务器连接失败,Windows服务器远程桌面连接失败是什么原因
  17. 桂林老兵php,桂林老兵的SQLSERVER高级注入技巧
  18. Zoom会议使用指南
  19. Docker中LNMP分布式容器部署
  20. 组合(Combination)

热门文章

  1. 征信上显示保险代偿记录,那你的信用基本就黑了
  2. 1万块钱如何理财可以获得最高收益?
  3. pagerank数据集_从数据结构到算法:图网络方法初探
  4. php 实例 规范,PHP开发规范实例详解
  5. 一键 linux桌面安装vnc,Ubuntu 16.04 LTS一键安装VNC
  6. 搜狗输入法在idea打不了汉字_IDEA开发软件在linux环境下使用搜狗输入法无法进行中文输入...
  7. linux games账号,linux for games
  8. php调用md5.js,PHP和JS实现HTTP上安全地传输密码
  9. 计算机设备操作与讲解,计算机组成与操作系统简介
  10. 机器学习两种距离——欧式距离和马氏距离