[redis] 数据库相关 -- 键空间
程序员文章站
2022-06-04 11:06:53
...
键空间
- 版本 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;
- 读写键空间时的维护操作
说明: 对键空间执行指定的读写操作外,还会执行其他额外的维护操作- 读取键后,会根据键是否存在更新服务器键空间 命中(hit) 或 不命中(miss) 次数,可以通过 info stat 命令中的 keyspace_hits 和 keyspace_miss 属性查看;
- 读取键后,会更新键的 LRU(最后一次使用)时间 ,用于计算键的闲置时间(过期策略),使用 OBJECT idletime 命令查看 key 的闲置时间;
- 如果键已过期,则先删除键再执行余下操作
- 如果服务器对某个进行 WATCH 监控的键进行修改操作后,会将此键标记为 dirty。从而让事务程序觉察
- 服务器每修改一次键后,都会对 dirty 键计数器的值增 1。会触发服务器的持久化以及复制操作。
- 如果服务器开启了通知功能,对键进行修改后会根据服务器配置发送相应的数据库通知。
上一篇: 夏朝真的没有被商汤灭掉吗?真相是什么
下一篇: 秦始皇做了什么事情,被骂了两千多年?