且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

Redis 数据库结构

更新时间:2022-08-14 08:18:31

结构:

public class RedisDb {
    private int id;         // 数据库号码,用来程序内部选择数据库
    private Dictionary dict;   // 键值数据
    private Dictionary<String, Long> expires;// 过期信息
}

实际上键值数据是字典结构,这里使用HashMap表示

键空间

键空间的操作

  • 字典的基本操作,增删改查
  • 更新命中率
  • 更新lru
  • 删除过期键
  • 事务中对键的修改设置为脏

键的过期

expires保存了键的过期时间,可以使用命令来设置该四件

过期判定

if(existInExpires(key)){
    if(now() > expires.get(key)){
        // 过期
    }
}

过期键删除

有三种方式:

  • 定时删除, 在设置的时候创建定时任务,到时执行删除
    内存友好,费CPU
  • 惰性删除,过期不管,下次访问时删除且返回空
    CPU友好,费内存
  • 定期删除,使用定期任务,来检查是否过期。 折中
    redis使用了后两者相配合。

过期对AOF等的影响

  • 过期键不写入RDB
  • 过期键删除点(惰性或者定期)会写AOF
  • 复制, 主节点会同步删除,从属节点返回已经过期但是不删除