欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

[redis] 数据库相关 -- 键空间

程序员文章站 2022-06-04 11:06:53
...

键空间

  1. 版本 5.0 结构
    	typedef struct redisDb {
    		// 数据库键空间,保存数据库中所有的键值对,字典结构;
    		// 每个键都是字符串对象
    		// 值可以为 字符串对象、列表对象、哈希表对象、集合对象、有序集合对象 中任意一种 Redis 对象
    	    dict *dict;                                /* The keyspace for this DB */
    	    // 过期字典,用于保存数据库中所有键的过期时间;
    	    // 字典的键是指针,指向某个键对象
    	    // 字典的值为 long long 类型的整数,保存键所指向的数据库键的过期时间 毫秒精度的 UNIX 时间戳
    	    dict *expires;              			/* Timeout of keys with a timeout set */
    	    dict *blocking_keys;          /* Keys with clients waiting for data (BLPOP)*/
    	    dict *ready_keys;                /* Blocked keys that received a PUSH */
    	    dict *watched_keys;          /* WATCHED keys for MULTI/EXEC CAS */
    	    int id;                                        /* Database ID */
    	    long long avg_ttl;                /* Average TTL, just for stats */
    	    list *defrag_later;                /* List of key names to attempt to defrag one by one, gradually. */
    	} redisDb;
    
  2. 读写键空间时的维护操作
    说明: 对键空间执行指定的读写操作外,还会执行其他额外的维护操作
    1. 读取键后,会根据键是否存在更新服务器键空间 命中(hit)不命中(miss) 次数,可以通过 info stat 命令中的 keyspace_hits 和 keyspace_miss 属性查看;
    2. 读取键后,会更新键的 LRU(最后一次使用)时间 ,用于计算键的闲置时间(过期策略),使用 OBJECT idletime 命令查看 key 的闲置时间;
    3. 如果键已过期,则先删除键再执行余下操作
    4. 如果服务器对某个进行 WATCH 监控的键进行修改操作后,会将此键标记为 dirty。从而让事务程序觉察
    5. 服务器每修改一次键后,都会对 dirty 键计数器的值增 1。会触发服务器的持久化以及复制操作。
    6. 如果服务器开启了通知功能,对键进行修改后会根据服务器配置发送相应的数据库通知。
相关标签: redis