【Redis学习笔记(九)】之 Redis客户端详解

article/2025/9/20 10:45:12

文章目录

    • 本文章由公号【开发小鸽】发布!欢迎关注!!!
    • 一. 客户端
      • (一) 概述
      • (二) 客户端属性
        • 1. 套接字描述符
        • 2. 名字
        • 3. 标志
        • 4. 输入缓冲区
        • 5. 命令与命令参数
        • 6. 命令的实现函数
        • 7. 输出缓冲区
        • 8. 身份验证
        • 9. 时间
      • (三) 客户端的创建与关闭
        • 1. 创建普通客户端
        • 2. 关闭普通客户端
        • 3. Lua脚本的伪客户端
        • 4. AOF文件的伪客户端

本文章由公号【开发小鸽】发布!欢迎关注!!!


老规矩–妹妹镇楼:

一. 客户端

(一) 概述

       Redis服务器是典型的一对多服务器程序,通过使用I/O多路复用技术实现的文件事件处理器,Redis服务器使用单线程单进程的方式来处理命令请求,对于每个与服务器连接的客户端都创建了相应的redisClient结构,这个结构保存了客户端当前的状态信息。服务器状态结构的clients属性是一个链表,保存了所有与服务器连接的客户端的状态结构。

(二) 客户端属性

       客户端状态包含的属性有两类,一类是通用的属性,另一类是特定的属性,如操作数据库用到的db属性等等。

1. 套接字描述符

       客户端状态的fd属性记录了客户端正在使用的套接字描述符,有两种类型。一种是伪客户端类型,fd属性为-1,如处理AOF文件或者Lua脚本时产生的伪客户端。另一种是普通客户端,fd属性为大于-1的整数,使用套接字来与服务器通信。使用CLIENT list命令可以列出所有已连接的普通客户端。

2. 名字

       默认,连接到服务器的客户端没有名字,通过CLIENT setname命令为客户端设置一个名字,记录在客户端状态的name属性中。


3. 标志

       客户端的标志属性flags记录了客户端的角色,以及目前所处的状态,可以是单个值也可以是多个标志的二进制或。

4. 输入缓冲区

       客户端状态的输入缓冲区querybuf属性用于保存客户端发送的命令请求,该区域可以动态扩容,最大不能超过1GB,否则服务器会关闭这个客户端。

5. 命令与命令参数

       命令请求保存在querybuf属性后,服务器将对该内容进行分析,将命令参数和命令参数的个数分别保存到客户端状态的argv属性和argc属性中。argv属性是一个数组,每个项都是一个字符串对象,其中的argv[0]是要执行的命令,而之后的其他项是参数。

6. 命令的实现函数

       服务器获取命令和参数后,将根据命令的值在命令表中查找命令所对应的命令实现函数,该表是一个字典,字典的键是一个SDS结构,保存了命令的名字,字典的值是命令所对应的redisCommand结构,保存了命令的实现函数结构。当找到命令实现函数时,会将客户端状态的cmd属性指向这个结构,然后就会调用该命令实现了。


7. 输出缓冲区

       执行命令所得到的命令回复会被保存在客户端状态的输出缓冲区中,每个客户端都有两个输出缓冲区,一个是固定大小的保存短字符,一个是可变大小的保存长字符。


8. 身份验证

       客户端状态的authenticated属性用来记录客户端是否通过了身份验证,如果为0表示没有通过,那么除了AUTH验证命令,客户端发送的其他命令都会被服务器拒绝执行。如果为1表示通过了验证,当然这一切都需要服务器开启身份验证功能,否则,服务器不会拒绝客户端的请求。


9. 时间

       ctime: 创建客户端的时间;
       lastinteraction: 客户端与服务器最后一个互动时间;

(三) 客户端的创建与关闭

1. 创建普通客户端

       如果客户端是通过网络连接与服务器连接的普通客户端,则在使用connect函数连接到服务器时,服务器会调用连接事件处理器,为客户端创建相应的客户端状态,并添加到服务器状态的clients链表末尾。

2. 关闭普通客户端

       可能因为多种原因被关闭,如客户端进程退出或被杀死,发送了不符合协议格式的命令请求,发送的命令请求大小超过了输入缓冲区的限制,命令回复超过了输出缓冲区的限制等等。服务器使用两种模式限制输出缓冲区大小,一种是硬性的,超过了就关闭,另一种是软性限制,如果超过了该大小,但是没有超过硬性限制,且超过的持续时间超过了服务器设定的时长,最后还是要关闭客户端,否则不关闭。

3. Lua脚本的伪客户端

       服务器会在初始化时创建负责执行Lua脚本中包含的Redis命令的伪客户端,并关联在服务器状态的lua-client属性中,该客户端会在服务器运行周期一直存在,直到服务器关闭。

4. AOF文件的伪客户端

       载入完成之后,会关闭该伪客户端。


http://chatgpt.dhexx.cn/article/WnOorWDM.shtml

相关文章

[Redis]Redis客户端

文章目录 1. Redis 客户端2. Redis 命令行客户端2.1 redis-cli 的使用2.1.1 进入 redis-cli 交互控制台方式一2.1.1 进入 redis-cli 交互控制台方式二 3. Redis 图形化桌面客户端3.1 Redis 图形化桌面客户端下载3.2 Redis 图形化桌面客户端安装3.3 Redis 图形化桌面客户端连接 …

Redis 基础 -- Redis可视化客户端(Redis Desktop Manager)

文章目录 1. Redis可视化客户端(Redis Desktop Manager)1.1 下载Redis Desktop Manager1.2 安装 Redis Desktop Manager1.3 连接Redis服务器1.4 Redis Desktop Manager 基础操作教学1.4.1 删除数据1.4.2 添加数据1.4.3 查看数据(点击即可&…

几款连接redis的客户端(GUI客户端),下面记录了我使用的几款

几款连接redis的客户端(GUI客户端),下面记录了我使用的几款 一、Redis 客户端 1、命令行工具 命令行 (建议使用,简单) 比如windows的cmd和Linux、Mac的Terminal,虽然最简单好用。 必须保证有 redis-cli 命令(windows 是 redis-cli.exe)&…

windows下Nginx启动失败(常见的两个错误以及解决方案)

问题 windows 10 下启动nginx,闪屏而过,访问localhost显示无法访问。 尝试解决 cmd下使用命令:netstat -an | find "0.0.0.0:80",可以发现80端口已经被占用。 使用命令:netstat -ano 可以发现占用80端口的…

nginx 启动前端包

项目是前后端分离:前端用vue开发,后端用的是springboot开发,用nginx启动代理,启动前端包 1、安装nginx(此步骤就不细说了,如图) 2、将前端包放入nginx文件夹下 注:我放在project文…

Nginx 安装教程 (windows) 及详解 并通过Nginx启动项目(vue项目举例)

Nginx 常用命令 Nginx windows安装教程 通过Nginx启动项目(vue项目举例) 目录介绍 Nginx Nginx 是俄罗斯人 Igor Sysoev 编写的轻量级Web服务器,它的发音为 [ˈendʒɪnks] ,它不仅是一个高性能的HTTP和反向代理服务器,同时也是一个IMAP/P…

nginx修改监听端口号8080_解决Nginx启动失败

一、Nginx下载 http://nginx.org/en/download.html 二、Nginx启动失败原因 1、本人下载的是nginx-1.12.1(稳定版),下载完解压后,进入路径中,start nginx,发现窗口闪过。但是查找不到nginx进程。 2、进入 nginx-1.12.1\logs 路径下…

linux下nginx启动不了,Nginx启动失败的几种错误处理

nginx启动失败 启动nginx失败,报错信息如下: Starting nginx: nginx: [emerg] bind() to 0.0.0.0:**** failed (13: Permission denied) 这通常是因为开启了SELinux的原因,使用命令 getenforce 可以查看SELinux状态,如果输出为 enforcing …

NGINX启动报错,端口被占用

NGINX启动报错,端口被占用解决方案(修改端口号)   Nginx (engine x) 是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP服务器。Nginx是由伊戈尔赛索耶夫为俄罗斯访问量第二的Rambler.ru 站点(俄文&#x…

nginx 启动、停止、关闭

1,nginx 指定配置文件 /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf -c 参数 指定了要加载的nginx配置文件路径 1,从容停止Nginx: kill -QUIT 主进程号 2,快速停止Nginx: kill -TERM 主进程号 3,强制停止Nginx&am…

nginx启动web项目

1、服务器任何路径新建存放项目文件夹 例如:/home/www/xtzl_platform_web 将web项目的压缩包存放到xtzl_platform_web目录下并解压 3、修改nginx配置文件nginx.conf cd /usr/local/nginx/conf ,修改nginx.conf文件 添加新路径 (1)alias方式 location后面的文件名…

nginx 启动报错

systemctl start nginx 启动报错 报错内容如下: Job for nginx.service failed because the control process exited with error code. See “systemctl status nginx.service” and “journalctl -xe” for details. nginx -t 检查没有问题 systemctl status n…

nginx启动失败

启动nginx失败,报错信息如下 查看日志,centos下,ngin新的日志文件夹是/var/log/nginx,里面有多个文件 原来是配置文件有问题。 以下是test.cn.conf文件内容 日志文件第一行,是指location ~ \.php$ { 这行中的$和{之间…

解决nginx启动闪退

1.首先我们先了解一下nginx,(以下来自百度文献) Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器 [13] ,同时也提供了IMAP/POP3/SMTP服务。Nginx是由伊戈尔赛索耶夫为俄罗斯访问量第二的Rambler.ru站点(俄文…

nginx启动无反应

第一次使用nginx的时候,打开浏览器无反应 然后查看logs日志,原因是在nginx路径不能出现中文,修改后启动成功

nginx安装及其配置详细教程

1 nginx 介绍 1 什么是nginx Nginx是一款高性能的http 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器。 由俄罗斯的程序设计师Igor Sysoev所开发,官方测试nginx能够支支撑5万并发链接, 并且cpu、内存等资源消耗却非常…

最长公共子串 动态规划

最长公共子串 动态规划 题目 给定2个字符串,试求出这2个字符串的最长公共子串的长度。 输入格式 输入共2行,每行一个字符串。字符均为小写英文字母。 输出格式 仅一行,包含一个正整数,表示2个字符串的最长公共子串长度。 输…

Python最长公共子串

Python最长公共子串 方法一 最简单最容易想到的方法,去数组第一个元素为最长公共前缀,如果是,就return,如果不是就减去最后一个单词。只到找到位置。 class Solution:def longestCommonPrefix(self, strs):""":t…

最大公共子串c语言,最长公共子串(动态规划)

来源:https://www.cnblogs.com/fanguangdexiaoyuer/p/11281179.html 1 描述 有两个字符串(可能包含空格),请找出其中最长的公共连续子串,输出其长度。(长度在1000以内) 例如: 输入:abcde bcd 输出:3 2 解析 1、把两个字符串分别以…

求最长公共子串

内容: 采用顺序结构存储串,设计实现求串s和串t的一个最长公共子串的算法。 步骤: 算法分析 本题算法采用顺序存储结构求串s和串t的最大公共子串。串1用i指针,串2用t指针,对每个i,求从i开始的连续字符串与从j开始的连…