redis服务器将所有数据库都保存在服务器 RedisServer 结构的数组中, db 数组中的每一项都是一个 redisDb结构
struct redisServer { // 数组, 保存着服务器中的所有数据库 redisDb *db ; // 服务器的数据库数量 int dbnum }
redisDb结构
struct redisDb{ //数据库键空间,保存着数据库的所有键值对 dict *dict ; //过期键空间,保存着数据库的所有具有过期时间的键值对 dict *expires;
}
当对键设置超时时间后,其将转移到过期键空间中。过期时间的命令如下:
- expire
- pexpire
- expireat
- pexpireat
redis对键进行读写完毕后,还会进行后续的维护操作。内容如下:
- 更新键空间的命中次数、不命中次数
- 读取键后,维护键的最后访问时间
- 若是键已经过期,则先删除此键。再完善后续的操作
- 键被修改后,脏计数器便会加1
- 如果客户端监视了此键,那么服务器在修改完毕此键后,便会将此键标记为脏