Redis 实战之监视器

监视器

  • 成为监视器
  • 向监视器发送命令信息
  • 总结


成为监视器

发送MONITOR 命令可以让一个普通客户端变为一个监视器, 该命令的实现原理可以用以下伪代码来实现:

def MONITOR():

    # 打开客户端的监视器标志
    client.flags |= REDIS_MONITOR

    # 将客户端添加到服务器状态的 monitors 链表的末尾
    server.monitors.append(client)

    # 向客户端返回 OK
    send_reply("OK")

举个例子, 如果客户端 c10086 向服务器发送 MONITOR 命令, 那么这个客户端的 REDIS_MONITOR 标志会被打开, 并且这个客户端本身会被添加到 monitors 链表的表尾。
假设客户端 c10086 发送 MONITOR 命令之前, monitors 链表的状态如图 24-2 所示, 那么在服务器执行客户端 c10086 发送的 MONITOR 命令之后, monitors 链表将被更新为图 24-3 所示的状态。
在这里插入图片描述
在这里插入图片描述

向监视器发送命令信息

服务器在每次处理命令请求之前, 都会调用 replicationFeedMonitors 函数, 由这个函数将被处理命令请求的相关信息发送给各个监视器。

以下是replicationFeedMonitors 函数的伪代码定义, 函数首先根据传入的参数创建信息, 然后将信息发送给所有监视器:

def replicationFeedMonitors(client, monitors, dbid, argv, argc):

    # 根据执行命令的客户端、当前数据库的号码、命令参数、命令参数个数等参数
    # 创建要发送给各个监视器的信息
    msg = create_message(client, dbid, argv, argc)

    # 遍历所有监视器
    for monitor in monitors:

        # 将信息发送给监视器
        send_message(monitor, msg)

举个例子, 假设服务器在时间 1378822257.329412 , 根据 IP 为 127.0.0.1 、端口号为 56604 的客户端发送的命令请求, 对 0 号数据库执行命令 KEYS * , 那么服务器将创建以下信息:

1378822257.329412 [0 127.0.0.1:56604] "KEYS" "*"

如果服务器 monitors 链表的当前状态如图 24-3 所示, 那么服务器会分别将信息发送给 c128 、 c256 、 c512 和 c10086 四个监视器, 如图 24-4 所示。
在这里插入图片描述

总结

客户端可以通过执行 MONITOR 命令, 将客户端转换成监视器, 接收并打印服务器处理的每个命令请求的相关信息。
当一个客户端从普通客户端变为监视器时, 该客户端的 REDIS_MONITOR 标识会被打开。
服务器将所有监视器都记录在 monitors 链表中。
每次处理命令请求时, 服务器都会遍历 monitors 链表, 将相关信息发送给监视器。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

基于微信小程序的校园二手交易平台设计与实现(论文+源码)_kaic

基于微信小程序的校园二手交易平台 设计与实现 摘 要 随着绿色低碳消费和循环经济的理念越来越深入人心,大学生二手商品市场发展迅猛,而大部分二手交易平台运输方式与收售方式对于大学生用户群体并不适用,所以急需一款针对大学生二手商品交易的软件&…

【千帆平台】使用AppBuilder零代码创建应用,然后通过OpenAPI方式调用应用

欢迎来到《小5讲堂》 这是《千帆平台》系列文章,每篇文章将以博主理解的角度展开讲解。 温馨提示:博主能力有限,理解水平有限,若有不对之处望指正! 目录 前言创建API密钥调用文档调用说明API服务域名通信协议字符编码公…

视频号小店保证金,服务费,手续费是多少?货款结算周期多长?

大家好,我是电商糖果 随着视频号小店越来越火,很多商家都想入驻小店。 入驻之前大家对视频号的收费问题都比较好奇。 糖果2022年就开始做店的了,对小店的保证金,服务费的,手续费,货款结算周期都非常了解…

Windows使用Miniconda3安装python、环境配置以及conda常用命令

Windows使用Miniconda3安装python以及conda常用命令 这是学习使用python的第一篇文章,这将是一个关于python学习和使用的一个系列文章的开始,有兴趣的可以给个关注持续获取更新内容。 Miniconda3是什么? Miniconda3是一个轻量级的Anaconda发…

【双曲几何-05 庞加莱模型】庞加来上半平面模型的几何属性

文章目录 一、说明二、双曲几何的上半平面模型三、距离问题四、弧长微分五、面积问题六、python实现 一、说明 我们知道,双曲几何的著名模型有四种:微分解析模型、庞加莱盘、庞加莱半平面、克莱因盘。庞加莱圆盘模型是表示双曲几何的一种方法&#xff0c…

【Linux】Centos7配置JDK

1.启动虚拟机、Xshell、Xftp 2.在Xshell中新建一个会话,用于连接到虚拟机中 3.因为虚拟机里自带有JDK,所以需要先卸载自带的JDK 3.1.查询已安装的 jdk 列表 rpm -qa | grep jdk3.2.将查询到的全部删除 yum -y remove XXX(上面查询到的 j…

【机器学习300问】82、RMSprop梯度下降优化算法的原理是什么?

RMSprop,全称Root Mean Square Propagation,中文名称“均方根传播”算法。让我来举个例子给大家介绍一下它的原理! 一、通过举例来感性认识 建议你第一次看下面的例子时忽略小括号里的内容,在看完本文当你对RMSprop有了一定理解时…

豆芽机置入语音芯片WTN6040-8S:开启智能生活新篇章,让豆芽制作更便捷有趣

豆芽机的开发背景: 豆芽作为一种营养丰富、味道鲜美的食品,深受广大消费者的喜爱。然而,传统的豆芽生产过程繁琐,需要耗费大量的时间和人力,且存在生产效率低、质量不稳定等问题。随着人们生活节奏的加快和对健康饮食的…

K8s源码分析(一)-K8s调度框架及调度器初始化介绍

本文首发在个人博客上,欢迎来踩! 文章目录 调度框架介绍K8s scheduler 介绍K8s scheduler的初始化Cobra介绍K8s scheduler中初始化的源代码解析 调度框架介绍 这是官方对于v1.27调度框架的介绍文档:https://v1-27.docs.kubernetes.io/docs/…

地球行星UE5和UE4

地球行星,包含多种地球风格,可蓝图控制自转和停止,可材质自转. 支持版本4.21-5.4版本 下载位置:https://mbd.pub/o/bread/ZpWZm5lv b站工坊:https://gf.bilibili.com/item/detail/1105582041 _______________________…

Java学习【类与对象】

类和对象 开始我们就不讲那些把大象放冰箱需要几步来引入面向对象的例子了,直接上干货。 在Java中,类是对现实世界中某一类事物的抽象描述。它包含了该类事物的属性和方法。属性用于描述事物的状态,而方法则用于描述事物可以做的事情。对象也…

批量无人值守设备运维如何轻松搞定,设备授权和分组很关键

如今数字化时代,很多企业的一线业务依托无人值守的智能终端设备展开,这类设备的广泛使用可以帮助企业以较小的成本铺开大规模的业务,比如现在随处可见的智能售货机,商场的各类智能互动终端等等。 这类设备整体上可以降低业务开展…

注册测绘师历年真题及答案解析

点赞、留言、关注“地知通”公众号,免费获取注册测绘师历年真题及答案解析学习材料。 声明:转载此文不为商业用途。文字和图片版权归原作者所有,若有来源标注错误或侵犯了您的合法权益,请与我们联系,我们将及时处理&am…

RegExp魔法阵与Cookie记忆宫殿:JavaScript 中的秘密宝藏

个人主页:学习前端的小z 个人专栏:JavaScript 精粹 本专栏旨在分享记录每日学习的前端知识和学习笔记的归纳总结,欢迎大家在评论区交流讨论! 文章目录 🔆RegExp 🎲 1 什么是正则表达式 🎲2 创建…

Android11 InputDispatcher 分发事件流程分析

在 Android11 InputReader分析 一文中分析到,InputReader将数据放入iq队列后,唤醒InputDispatcher线程,执行InputDispatcher的dispatchOnce方法 //frameworks\native\services\inputflinger\dispatcher\InputDispatcher.cpp void InputDispa…

【MQTT】MQTT协议和相关概念介绍

😁博客主页😁:🚀https://blog.csdn.net/wkd_007🚀 🤑博客内容🤑:🍭嵌入式开发、Linux、C语言、C、数据结构、音视频🍭 🤣本文内容🤣&a…

转行网络安全的重要建议,助你顺利入门

目录 为什么写这篇文章 为什么我更合适回答这个问题 先问自己3个问题 1.一定要明确自己是否是真喜欢,还是一时好奇。 2.自学的习惯 3.选择网安、攻防这行的目标是什么? 确认无误后,那如何进入这个行业? 1.选择渗透测试集中…

Boost库的使用

1 下载与安装 1.1 下载 网址:Boost C Libraries 进入后选择自己需要的版本安装即可 1.2 安装 1.2.1 解压 1.2.2 编译安装 双击bootstrap.bat 这一步完成后会生成一个b2.exe文件 双击b2.exe文件运行(此步需要花费较长的时间) 之后再stag…

新增分类——后端

实现功能: 代码开发逻辑: 页面发送ajax请求,将新增分类窗口输入的数据以json形式提交到服务端服务端Controller接收页面提交的数据并调用Service将数据进行保存Service调用Mapper操作数据库,保存数据 代码实现: Con…

遇到如此反复的外贸客户,你可以这样做~

来源:宜选网,侵删 当你们遇到爽快的买家的时候,你是否有把握一定能把她拿下呢? 还是说即使客户很爽快,你也会耐心认真的沟通呢? 今天要和大家分享的这个买家,我本以为他是一个很爽快的买家&am…
最新文章