美文网首页
04-redis客户端

04-redis客户端

作者: 有何不可12317 | 来源:发表于2018-08-19 21:19 被阅读0次
  • 服务器状态结构使用clients链表连接起多个客户端状态,新添加的客户端状态会被放到链表的末尾
struct redisServer {
    ...;
    list *clients; // 一个链表,保存了所有客户端状态
    ...;
};

客户端属性

typedef struct redisCLient {
    ...;
    int     fd;     // 记录了客户端正在使用的描述符,伪客户端的fd=-1
    robj    *name;  // 客户端名字,一个客户端连接上服务器没有名字,通过CLIENT setname才有名字
    int     flags;  // 记录了客户端角色以及客户端目前所处的状态
    sds     querybuf;   // 客户端状态缓冲区,保存客户端发送的命令
    robj    **argv; // 解析客户端命令之后,存储命令以及命令参数
    int     argc;   // 记录argv数组长度
    struct redisCommand *cmd;   // 命令实现函数 
    char    buf[REDIS_REPLY_CHUNK_BYTES];   // 固定大小的输出缓冲区
    int     bufpos;     // 记录buf已使用字节数
    list    *reply;     // 可变大小输出缓冲区
    int     authenticated;  // 身份验证,0表示验证未通过,1表示通过
    time_t  ctime;          // 记录创建客户端的时间
    time_t  lastinterracation;  // 记录客户端与服务器最后进行互动的时间
    time_t  obuf_soft_limit_reached_time;   // 记录输出缓冲区第一次到达软限制的时间
    ...;
} redisClient;
  • 客户端状态flags属性使用不同标志来表示客户端的角以及客户端当前所处的状态。
  • 输入缓冲区记录了客户端发送的命令请求,这个缓冲区大小不能超过1GB。
  • 命令的参数和参数个数会被记录在客户端状态argv和argc属性里,而cmd属性则记录了客户端要执行命令的实现函数。
  • 客户端有固定大小缓冲区和可变大小缓冲区两种可用,其中固定大小缓冲区最大是16KB,而可变大小缓冲区最大大小不能超过服务器设置的硬限制。
  • 输出缓冲区限制值有两种,如果输出缓冲区的大小超过了服务器设置的硬限制,那么客户端会被立即关闭;除此之外,如果客户端在一定时间内,一直超过服务器设置的软性限制,客户端也会被关闭。
  • 当一个客户端通过网络连接连上服务器时,服务器会为这个客户端创建相应的客户端状态。网络连接关闭,发送了不合格协议格式的命令请求,成为CLIENT KILL命令的目标,空转事件超时,输出缓冲区的大小超出限制,以上这些原因都会炒成客户端被关闭。
  • 处理lua脚本的伪客户端在服务器初始化时创建,这个客户端会一直存在,知道服务器关闭。
  • 载入AOF文件时使用伪客户端在载入工作开始时动态创建,载入工作完毕之后关闭。

参考
黄键宏老师的《redis设计与实现》,机械工业出版社

相关文章

  • 04-redis客户端

    服务器状态结构使用clients链表连接起多个客户端状态,新添加的客户端状态会被放到链表的末尾 客户端属性 客户端...

  • 04-Redis

    一、Redis基础 1.概述 Redis是一个开源,高级的键值存储和一个适用的解决方案,用于构建高性能,可扩展的W...

  • 04-Redis的Hash操作

    1. 概述: 可以将Redis中的Hashes类型(哈希是从redis-2.0.0版本之后才有的数据结构)看成具有...

  • 04-Redis 操作之List操作

    Redis 操作之List操作 List操作,redis中的List在在内存中按照一个name对应一个List来存...

  • 04-Redis的内存对象及内部编码_String

    Redis支持5种对象类型,而每种都至少有两种编码,这样做的好处在于: 一方面接口与实现分离,当需要增加或改变内部...

  • socketserver模块实现并发

    服务端 客户端 (开启多个客户端) 执行如下 客户端1: 客户端2:

  • Redis入门到高可用-3.Redis客户端

    1.Redis客户端 Java客户端:Jedis python客户端:redis-py 2.Java客户端:Jed...

  • Thrift RPC Client 流程

    Thrift客户端有两种:同步客户端和异步客户端。 同步客户端 同步客户端比较简单,先看一下类图。 TServic...

  • qt语音解码cg729客户端

    //客户端头文件 //客户端源码

  • Python socket网络编程

    服务端等待客户端连接并接收客户端信息,然后将客户端信息加上时间戳返回给客户端, 当客户端输入空消息时,连接中断,服...

网友评论

      本文标题:04-redis客户端

      本文链接:https://www.haomeiwen.com/subject/hpdhiftx.html