【笔记】《Redis设计与实现》chapter9 数据库
9.1 服务器中的数据库
Redis服务器将所有都保存在服务器状态redis.h/redisServer结构中
struct redisServer{
//...
// 一个数组,保存着服务器中所有数据库
redisDb *db;
//...
}
struct redisServer{
//...
// 服务器的数据库数量
int dbnum;
//...
}
9.2 切换数据库
客户端状态redisClient结构的db属性记录了客户端当前的目标数据库
typedef struct redisClient{
//...
// 记录客户端当前正在使用的数据库
redisDB *db;
//...
}
9.3 数据库键空间
typedef struct redisDb{
//...
// 数据库键空间,保存着数据库中的所有键值对
dict *dict;
//...
}

9.4 设置键的生存时间
通过EXPIRE命令或者PEXPIRE命令设置一个秒或毫秒的过期时间
通过EXPIREAT或者PEXPIREAT命令设置一个秒或者毫秒的过期时间戳
保存过期时间
redisDb结构的expires字典保存了数据库中所有键的过期时间,我们称这个字典为过期字典
- 过期字典是一个指针,这个指针指向空间中某个键对象
- 过期字典的值是一个long long类型的整数,这个整数保存了键所指向的数据库键的过期时间——一个毫秒精度的UNIX时间戳
typedef struct redisDb{
//...
// 过期字典,保存着键的过期时间
dict *expires;
//...
}
移除过期时间
PERSIST命令可以移除一个键的过期时间
计算并返回剩余生存时间
9.7 AOF、FDB 和复制功能对过期键的处理
9.8 数据库通知
SUBSCRIBE __keyspace@0__:message
// 使客户端进入接收键空间通知模式
SUBSCRIBE __keyevent@0__:del
// 使客户端进入接收键事件通知模式
发送通知
9.9 重点回顾


浙公网安备 33010602011771号