论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
朋友圈
看朋友圈动态,了解ToB世界。
ToB门户
了解全球最新的ToB事件
博客
Blog
排行榜
Ranklist
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
导读
Guide
相册
Album
记录
Doing
搜索
本版
文章
帖子
ToB圈子
用户
免费入驻
产品入驻
解决方案入驻
公司入驻
案例入驻
登录
·
注册
只需一步,快速开始
账号登录
立即注册
找回密码
用户名
Email
自动登录
找回密码
密码
登录
立即注册
首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
圈子
SAAS
IT评测·应用市场-qidao123.com
»
论坛
›
软件与程序人生
›
程序人生
›
《Redis计划与实现》读书笔记-客户端
《Redis计划与实现》读书笔记-客户端
写过一篇
金牌会员
|
2024-8-19 22:45:26
|
显示全部楼层
|
阅读模式
楼主
主题
972
|
帖子
972
|
积分
2916
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要
登录
才可以下载或查看,没有账号?
立即注册
x
目录
1.Client简介
2.客户端属性
1)(本文重点)比较通用的属性
2)(后续分享)另外一类是和特定功能相干的属性
2.1套接字文件描述符
2.2名字
2.3标志(flag)
2.4输入缓冲区
2.5下令参数和个数
2.6下令函数
2.7输出缓冲区
3.总结
1.Client简介
Redis 服务器是典范的一对多服务器程序:一个服务器可以与多个客户端建立网络连接,
每个客户端可以向服务器发送下令请求,而服务器则吸收并处置处罚客户端发送的下令请求,并
向客户端返回下令回复。
通过使用由1/0多路复用技能实现的文件变乱处置处罚器,Redis 服务器使用单线程单历程
的方式来处置处罚下令请求,并与多个客户端举行网络通讯。
对于每个与服务器举行连接的客户端,服务器都为这些客户端建立了相应的redis.h/
redisclient 结构(客户端状态),这个结构保存了客户端当前的状态信息,以及执行相
关功能时需要用到的数据结构,其中包括:
Redis 服务器状态结构的
clients属性是一个链表
,
这个链表保存了所有与服务器连
接的客户端的状态结构,对客户端执行批量利用,大概查找某个指定的客户端
,都可以通过遍历clients连表完成。
2.客户端属性
客户端状态包罗的属性可以分为两类:
1)
(本文重点)
比较通用的属性
这些属性很少与特定功能相干,无论客户端执行的是什么
工作,它们都要用到这些属性。
2)(后续分享)
另外一类是和特定功能相干的属性
比如利用数据库时需要用到的ab 属性和dictid属性,执行事件时需要用到的mstate 属性,以及执行 WATCH下令时需要用到的watched_keys 属性等等。
本章将对客户端状态中比较通用的那部门属性举行介绍,至于那些和特定功能相干的属
性,后面会继续分享。
2.1套接字文件描述符
客户端状态的fd属性记载了套接字描述符。
tydedef struct redisClient{
int fd;
}
复制代码
根据客户端范例的差别,fd属性的值可以是-1大概是大于-1 的整数:
1)伪客户端(fake client)的fd属性的值为-1:伪客户端处置处罚的下令请求泉源于AOF
文件大概Lua脚本,而不是网络,所以这种客户端不需要套接字连接,自然也不需
要记载套接字描述符。目前 Redis 服务器会在两个地方用到伪客户端,一个用于载
人AOF 文件并还原数据库状态,而另一个则用于执行Lua 脚本中包罗的Redis下令。
2)
平凡客户端的Ed属性的值为大于-1的整数
:平凡客户端使用套接字来与服务器进
行通讯,所以服务器会用fd 属性来记载客户端套接字的描述符。因为正当的套接字
描述符不能是-1,所以平凡客户端的套接字描述符的值必然是大于-1 的整数。
2.2名字
在默认情况下,一个连接到服务器的客户端是没著名字的。
比如在下面展示的 CLIENT list下令示例中,两个客户端的name 域都是空缺的:
设置名字:setname下令
2.3标志(flag)
用了记载client的角色,以及处于什么状态。
tydedef struct redisClient{
int flags;
}
复制代码
每个标志使用一个常量表示,一部门标志记载了客户端的角色:
1)在主从服务器举行复制利用时,主服务器会成为从服务器的客户端,而从服务器也
会成为主服务器的客户端。
REDIS_MASTER
标志表示客户端代表的是一个主服务
器,
REDIS_SLAVE
标志表示客户端代表的是一个从服务器。
REDIS_PRE_PSYNC
标志表示客户端代表的是一个版本低于 Redis2.8的从服务器,
主服务器不能使用PSYNC下令与这个从服务器举行同步。这个标志只能在 REDIS_
SLAVE 标志处于打开状态时使用。
2)
REDIS_LUA_CLIENT
标识表示客户端是专门用于处置处罚Lua 脚本里面包罗的 Redis
下令的伪客户端。
而另外一部门标志则记载了客户端目前所处的状态:
3)
REDIS_MONITOR
标志表示客户端正在执行MONITOR下令。
4)
REDIS_UNIX_SOCKET
标志表示服务器使用 UNIX 套接字来连接客户端。
5)
REDIS_BLOCKED
标志表示客户端正在被 BRPOP、BLPOP等下令阻塞。
6)
REDISUNBLOCKED
标志表示客户端已经从 REDIS_BLOCKED 标志所表示的阻塞状
2.4输入缓冲区
用于保存客户端发送的下令请求
最大限定:1G
tydedef struct redisClient{
sds querybuf;
}
复制代码
2.5下令参数和个数
在服务器将客户端发送的下令请求保存到客户端状态的querybuf 属性之后,服务器
将对下令请求的内容举行分析,并将得出的下令参数以及下令参数的个数分别保存到客户端
状态的 argv 属性和 argc属性:
argv 属性是一个数组,数组中的每个项都是一个字符串对象
,其中 argv[0]是要执
行的下令,而之后的其他项则是传给下令的参数。
argc属性则负责记载 argv 数组的长度
。
2.6下令函数
当服务器从协议内容中分析并得出 argv 属性和 arge 属性的值之后,服务器将根据项
argv 101的值,在下令表中查找下令所对应的下令实现函数。
图13-7展示了一个下令表示例,该表是一个字典,字典的键是一个 SDS结构,保存
了下令的名字,字典的值是下令所对应的rediscommand 结构,这个结构保存了下令的实
现函数、下令的标志、下令应该给定的参数个数、下令的总执行次数和总消耗时长等统计
信息。
2.7输出缓冲区
服务端执行下令的回复,会保存到输出缓冲区,共2个缓冲区
1)固定大小:存OK,错误下令,简单的字符串,整数值
2)可变的:长字符串,列表,集合等。
通过使用
链表来连接多个字符串对象
,服务器可以为客户端保存一个非常长的下令回 复,而不必受到固定大小缓冲区
16KB大小的
限定。
3.总结
口客户端状态的Elags 属性使用差别标志来表示客户端的角色,以及客户端当前所处
的状态。
口 输人缓冲区记载了客户端发送的下令请求,这个缓冲区的大小不能凌驾1GB。
口 下令的参数和参数个数会被记载在客户端状态的 argv 和 argc 属性里面,而 cmd
属性则记载了客户端要执行下令的实现函数。
口 客户端有固定大小缓冲区和可变大小缓冲区两种缓冲区可用,其中固定大小缓冲区
的最大大小为16 KB,而可变大小缓冲区的最大大小不能凌驾服务器设置的硬性限
制值。
口 输出缓冲区限定值有两种,如果输出缓冲区的大小凌驾了服务器设置的硬性限定,
那么客户端会被立即关闭;除此之外,如果客户端在一定时间内,一直凌驾服务器
设置的软性限定,那么客户端也会被关闭。
口 当一个客户端通过网络连接连上服务器时,服务器会为这个客户端创建相应的客户
端状态。网络连接关闭、发送了不合协议格式的下令请求、成为 CLIENT KILL 下令
的目标、空转时间超时、输出缓冲区的大小超出限定,以上这些原因都会造成客户
端被关闭。
口处置处罚Lua 脚本的伪客户端在服务器初始化时创建,这个客户端会一直存在,直到服
务器关闭。
口 载人AOF 文件时使用的伪客户端在载人工作开始时动态创建,载人工作完毕之后关闭。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复
使用道具
举报
0 个回复
倒序浏览
返回列表
快速回复
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
or
立即注册
本版积分规则
发表回复
回帖并转播
回帖后跳转到最后一页
发新帖
回复
写过一篇
金牌会员
这个人很懒什么都没写!
楼主热帖
hibernate入门
kubernetes数据持久化StorageClass动态 ...
回忆我的第一个软件项目
Debian/Ubuntu使用apt安装php8.x
Java EnumMap putAll()方法具有什么功 ...
26基于java的电影院售票管理系统设计 ...
OpenHarmony开源鸿蒙与HarmonyOS商业鸿 ...
Jvm调优
管理软件定制公司 广州管理软件定制开 ...
基于LSTM的多变量多输出温湿度预测 ...
标签云
AI
运维
CIO
存储
服务器
浏览过的版块
DevOps与敏捷开发
分布式数据库
网络安全
移动端开发
SQL-Server
快速回复
返回顶部
返回列表