redis(8)——客户端
来源:互联网 发布:windows安装器安装xp 编辑:程序博客网 时间:2024/06/06 05:49
一、客户端的数据结构
对于每个与服务器进行连接的客户端,服务器都为这些客户端建立了相应的redis.h/redisClient结构(客户端状态),这个结构保存了客户端当前的状态信息,以及执行相关功能时需要用到的数据结构,其中包括:
客户端的套接字描述符。客户端状态的fd属性记录了客户端正在使用的套接字描述符,根据套接字的不同区分客户端为伪客户端还是普通客户端。
客户端的名字。在默认情况下,一个连接到服务器的客户端是没有名字的。
客户端的标志值(flag ):客户端的标志属性flags记录了客户端的角色(role ),以及客户端目前所处的状态。
指向客户端正在使用的数据库的指针,以及该数据库的号码。
客户端当前要执行的命令、命令的参数、命令参数的个数,以及指向命令实现函数的指针。
客户端的输人缓冲区:用于保存客户端发送的命令请求。
客户端的输出缓冲区:执行命令所得的命令回复会被保存在客户端状态的输出缓冲区里面,每个客户端都有两个输出缓冲区可用,一个缓冲区的大小是固定的(保存那些长度比较小的回复),另一个缓冲区的大小是可变的(保存那些长度比较大的回复)
客户端的复制状态信息,以及进行复制所需的数据结构。
客户端执行BRPOP,BLPOP等列表阻塞命令时使用的数据结构。
客户端的事务状态,以及执行WATCH命令时用到的数据结构。
客户端执行发布与订阅功能时用到的数据结构。
客户端的身份验证标志。
客户端的创建时间,客户端和服务器最后一次通信的时间,以及客户端的输出缓冲区大小超出软性限制(soft limit)的时间。
二、创建和关闭普通客户端
1、创建普通客户端
如果客户端是通过网络连接与服务器进行连接的普通客户端,那么在客户端使用connect函数连接到服务器时,服务器就会调用连接事件处理器,为客户端创建相应的客户端状态,并将这个新的客户端状态添加到服务器状态结构clients链表的末尾。
2、关闭普通客户端
一个普通客户端可以因为多种原因而被关闭:
如果客户端进程退出或者被杀死,那么客户端与服务器之间的网络连接将被关闭,从而造成客户端被关闭。
如果客户端向服务器发送了带有不符合协议格式的命令请求,那么这个客户端也会被服务器关闭。
如果客户端成为了CLIENTKILL命令的目标,那么它也会被关闭。
如果用户为服务器设置了timeout配置选项,那么当客户端的空转时间超过timeout选项设置的值时,客户端将被关闭。不过timeout选项有一些例外情况:如果客户端是主服务器(打开了REDIS_MASTER标志),从服务器(打开了REDIS_SLAVE标志),正在被BLPOP等命令阻塞(打开了REDIS_BLOCKED标志),或者正在执行SUBSCRIBE, PSUBSCRIBE等订阅命令,那么即使客户端的空转时间超过了timeout选项的值,客户端也不会被服务器关闭。
如果客户端发送的命令请求的大小超过了输入缓冲区的限制大小(默认为1 GB ),那么这个客户端会被服务器关闭。
如果要发送给客户端的命令回复的大小超过了输出缓冲区的限制大小,那么这个客户端会被服务器关闭。
3、关闭伪客户端
lua_client伪客户端在服务器运行的整个生命期中会一直存在,只有服务器被关闭时,这个客户端才会被关闭。
服务器在载入AOF文件时,会创建用于执行AOF文件包含的Redis命令的伪客户端,并在载入完成之后,关闭这个伪客户端。
- redis(8)——客户端
- Redis客户端——Jedis使用
- redis入门——客户端篇
- redis入门——客户端篇
- Redis入门(三)—— 使用redis客户端连接windows和linux下的redis并解决无法连接redis的问题
- Redis客户端访问(2)
- redis源码学习(客户端)
- Redis源码分析(二十四)——客户端与服务器
- 最简单的Redis客户端实现——Golang
- redis客户端
- redis客户端
- Redis 客户端
- redis--客户端
- 【redis】客户端
- ServiceStack.Redis——Redis在.net上的客户端解决方案
- Redis之—— java客户端链接不上redis解决方案
- Redis实现分布式锁全局锁—Redis客户端Redisson中分布式锁RLock实现
- 从零开始写redis客户端(deerlet-redis-client)之路——第一个纠结很久的问题,restore引发的血案
- comparator接口与Comparable接口的区别
- Java 判断连接远程主机
- 单例和多例的区别
- vue2.0 keep-alive最佳实践
- 在PCB中加入图片LOGO的教程
- redis(8)——客户端
- ionic的导航栏配置路由
- qiime 1.8 pkg_resources.distributionNotFound:numpy==1.5.1报错
- ionic 菜鸟基本用法(可复制代码)
- windows下流媒体nginx-rmtp-module服务器搭建
- c++默认构造函数
- 没整明白的事之debian修改hostname出现的问题
- YTU.2782: 用数字造数字
- 人工神经网络(四)感知器学习规则推导