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

发布与订阅

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/257835.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

html中文段落,HTML 段落-JavaScript中文网-JavaScript教程资源分享门户

HTML 可以将文档分割为若干段落。HTML 段落段落是通过 标签定义的。实例这是一个段落 这是另一个段落尝试一下 注意:浏览器会自动地在段落的前后添加空行。( 是块级元素)不要忘记结束标签即使忘了使用结束标签,大多数浏览器也会正确地将 HTML 显示出来&a…

自学python系列14:映像,集合类型-集合类型

集合类型1.1如何创建集合类型和给集合赋值1.1.1 如何创建集合类型和给集合赋值集合的工厂方法set()和frozenset()>>> sset(abc)>>> sset([a, c, b])>>> tfrozenset(abc)>>> tfrozenset([a, c, b])len()计算的是集合的字母的个数1.1.2如何访…

观点:我们为什么需要威胁情报?

最近被谈论的异常火热的一个术语就是威胁情报,那么威胁情报到底是什么意思,它是一种什么概念或者机制呢?本文中我们就来亲密接触一下威胁情报,并了解它所具有的功能,然后给出几个威胁情报的最佳实践示例,最后分析威胁…

vijos 1942 [AH 2005] 小岛

描述 西伯利亚北部的寒地,坐落着由 N 个小岛组成的岛屿群,我们把这些小岛依次编号为 1 到 N 。 起初,岛屿之间没有任何的航线。后来随着交通的发展,逐渐出现了一些连通两座小岛的航线。例如增加一条在 u 号小岛与 v 号小岛之间的航…

聊城大学计算机应用基础函授,聊城大学试题计算机应用基础试题

姓名 年级专业层次 教学单位密封线 第1页 共3页聊城大学《计算机应用基础》函授试题一、判断题(共10题,每题2分,共20分)1、信息按状态划分可以划分为动态信息和静态信息。( √ )2、操作系统不具有通用性。( )3、在Windows XP环境中,整个显示…

Struts2中 Path (getContextPath与basePath)

struts2中的路径问题是根据action的路径而不是jsp路径来确定,所以尽量不要使用相对路径。 虽然可以用redirect方式解决,但redirect方式并非必要。解决办法非常简单,统一使用绝对路径。(在jsp中用request.getContextpath方式来拿到…

(七)SpringBoot+SpringCloud —— 集成断路器

2019独角兽企业重金招聘Python工程师标准>>> 断路器简介 在一个项目中,系统可能被拆分成多个服务,例如用户、订单和库存等。 这里存在这服务调用服务的情况,例如,客户端调用订单服务,订单服务又调用库存服务…

Java反射机制的使用方法

Java的反射机制同意你在程序执行的过程中获取类定义的细节。有时候在程序执行的时候才得知要调用哪个方法,这时候反射机制就派上用场了。获取类 类的获取方法有下面几种:forName()。通过Class.forName()获取与字符串向相应的类。比方\lstinline{Class.fo…

银行计算机设备日常检查表,[计算机]201154安全检查表.doc

[计算机]201154安全检查表土建基础框架施工检查表编号:2011-03-01-11工程名称铸造车间检查时间2011 年 月 日检查部位基础施工检 查 人检 查结 论百分制折合分数:需要整改共 条。受检单位河南周口受检责任人检 查 内 容检查项目检查内容和安全文明施工要…

我为什么要写FansUnion个人官网-BriefCMS-电子商务malling等系统

不少朋友一直关注我最近几个月,已经做的和正在做的项目,比如个人官网、BriefCMS、电子上午malling等系统。但是呢,部分朋友比较好奇,为啥要去写。他们比较疑惑的是,市面上已经有很多类似的系统了,甚至有部分…

Node开发文件上传系统及向七牛云存储和亚马逊AWS S3的文件上传

背景起,有奏乐: 有伟人曰:学习技能的最好途径莫过于理论与实践相结合。 初学Node这货时,每每读教程必会Fall asleep。 当真要开发系统时,顿觉精神百倍,即便踩坑无数也不失斗志。 因为同团队的小伙伴们都在辛…

计算机学业水平考试及格,信息技术学业水平考试表格部分试题(带答案)

第三章表格信息的加工与表达复习学案【学习目标】1.熟练使用excel加工表格信息,理解用图表来表现信息的特点与意义,2.能根据表格数据关系选择合适的图表类型表达意图。【考点】1.表格中常用的函数及其求值方法;2.根据数据选择合适的图表类型&…

Ok6410挂载NFS

虚拟机: apt-get install portmap apt-get install nfs-kernel-server mkdir /nfs/root/mNFS chmod 777 /nfs chmod 777 /nfs/root vi /etc/exports 添加:/nfs/root *(rw,sync,no_root_squash) 开发板: mount -t nfs 192.168.0.12…

云计算:容器技术变革云计算,SaaS带动CaaS市场

报告摘要: 1、容器技术增速惊人,市场认可度提高 虚拟化是云计算的重要基础,Docker定义了一套容器从构建到执行的标准化体系,改变了传统的虚拟化技术,深度影响了云计算领域。 随着谷歌、亚马逊、微软等云计算厂商纷纷加…

Jan 12 - Delete Node in a Linked List; Data Structure; Linked List; Pointer;

代码: /*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode(int x) { val x; }* }*/ public class Solution {public void deleteNode(ListNode node) {if(node null) return;while(node.next ! …

三年级神奇电子计算机教案,人教版小学三年级下册信息技术教案

人教版小学三年级下册信息技术教案 人教版小学信息技术教案第一课 神奇的信息世界教学目的:通过学习使学生更充分地了解信息技术在生活中的应用。教学内容:观看“神奇的信息世界”光碟教学准备:1、调试每台计算机 2、打开计算机并由教师机控制…

spark 安装配置

最佳参考链接 https://opensourceteam.gitbooks.io/bigdata/content/spark/install/spark-160-bin-hadoop26an_zhuang.html Apache Spark1.1.0部署与开发环境搭建   Spark是Apache公司推出的一种基于Hadoop Distributed File System(HDFS)的并行计算架构。与MapReduce不同&am…

《大数据原理:复杂信息的准备、共享和分析》一一2.5 在标识符中嵌入信息:不推荐...

2.5 在标识符中嵌入信息:不推荐大多数标识符不是纯粹的随机数,它们通常含有一些可由熟悉标识系统的人解释的嵌入信息。例如,标识符中可以嵌入姓的前三个字母,同样,标识符中也可以嵌入出生年份的最后两位数字。标识符中…

python基础知识-列表,元组,字典

列表(list) 赋值方法: l [11,45,67,34,89,23] l list() 列表的方法: 1 #!/usr/bin/env python2 3 class list(object):4 """5 list() -> new empty list6 list(iterable) -> new list initial…

车站计算机联锁系统的仿真设计,车站计算机联锁仿真设计.doc

车站计算机联锁仿真设计2012 届 交通运输 学院专 业学 号 2008学生姓名指导教师完成日期 2012年 月日计算机联锁是保证车站内列车和调车作业安全,提高车站通过能力的一种信号设备。设计以沙盘模型为根据,练习制作联锁信号图表,使用Visual Bas…