【笔记】《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;
    
    //...
}

image-20201008225404132

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 重点回顾

image-20201009105944552

posted @ 2021-04-20 11:27  汉森伯逸  阅读(54)  评论(0)    收藏  举报