美文网首页
Redis 5种数据类型与11种编码方式

Redis 5种数据类型与11种编码方式

作者: 沐兮_d64c | 来源:发表于2019-04-25 17:50 被阅读0次

    1,redis核心对象结构

    1)Redis object对象的数据结构,定义在src/server.h中。

    //redis对象再内部广泛使用
    typedef struct redisObject {
        unsigned type:4;//Basically this structure can represent all the basic Redis data types like strings, lists, sets, sorted sets and so forth.
        unsigned encoding:4;
        unsigned lru:LRU_BITS; /* lru time (relative to server.lruclock) */
        int refcount;//引用数
        void *ptr;
    } robj;
    

    2)client、redisServer对象,定义在src/server.h中。

    struct client {
        int fd;// Client socket.
        sds querybuf;//Buffer we use to accumulate client queries.
        int argc;//当前命令的参数个数
        robj **argv;//当前命令redisObject对象
        redisDb *db;//当前选择的db
        int flags;
        user *user;//connection关联的用户
        list *reply;//List of reply objects to send to the client.
        char buf[PROTO_REPLY_CHUNK_BYTES];//Response buffer
        char slave_ip[NET_IP_STR_LEN];//slave ip
        ... many other fields ...
    }
    struct redisServer {
        /* General */
        pid_t pid;                  /* Main process pid. */
        redisDb *db;
        dict *commands;             /* Command table */
    /* Networking */
        int port;                   /* TCP listening port */
        int tcp_backlog;            /* TCP listen() backlog */
        list *clients;              /* List of active clients */
        list *slaves, *monitors;    /* List of slaves and MONITORs */
    }
    

    3)server.c mainredis主方法
    initServerConfig() 初始化redisServer数据结构
    initServer() 分配需要操作的数据结构、设置socket监听
    aeMain() 开启event loop,接受新连接。
    serverCron():serverCron 每秒运行 10 次。
    更新服务器的各类统计信息
    清理过期键值对
    关闭和清理连接失效的客户端
    尝试进行 AOF 或 RDB 持久化操作
    4)networking.c 负责与clients的I/O
    createClient() 分配、初始化新的client
    writeToClient() Write data in output buffers to client.
    readQueryFromClient()将client数据读到query buffer中。

    2,redisObject对象详解

    1)位段结构定义属性。是以bit为单位来定义结构体(或联合体)中的成员变量所占的空间。
    unsigned type:4; 位段type,占4位
    2)type:对应了5中redis基本数据类型

    image.png
    3)encoding:对应了11中编码方式(如String、Hash、Zset内部有多种表示方式,可以使用object encoding命令查看)
    image.png
    image.png

    相关文章

      网友评论

          本文标题:Redis 5种数据类型与11种编码方式

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