美文网首页
服务器的数据库

服务器的数据库

作者: 鸿雁长飞光不度 | 来源:发表于2021-03-10 20:52 被阅读0次

redis服务器会根据dbnum创建数据库默认是16个

struct redisServer{
    redisDb * db
    int dbnum;
}

redisClient表示客户端,可以用SELECT 命令选择数据库

struct redisClient {
     redisDb * db; //指向redis选择的服务器
}

数据库

struct redisDb{
  dict * dict; //数据库的键空间
  dict * expires;// 过期
}
  • 键是数据库的键,类型是字符串对象。
  • 值就是redis数据库的值,为任意一种redis对象。

往redis的增删改查就是对dict的操作。

读写的额外维护操作

  • 更新key的命中或者不命中次数
  • 更新key的最后一次使用时间
  • 读取的时候发现key过期,会删除
  • 对watch某个key的客户端,key修改后标记dirty
  • dirty的key计数器增加1,触发服务器持久化和复制
  • 开启数据库通知功能,会发送数据库通知。

缓存删除策略

  • 定时删除:对CPU不友好,定时器实现方式是无序链表,耗费时间长。
  • 惰性删除:对内存不友好,数量多的时候相当于内存泄露,有些再次被访问几率很小。
  • 定期删除:难于设置删除的时长和频率

redis缓存删除策略

  • 惰性删除:所有的读写数据库操作经过expireIfNeed函数处理,过期删除,否则无动作。

  • 定期删除:分多次遍历各个数据库,从expires字典里面随机选择一部分删除。每次会记录上次执行的数据库的位置

  • AOF、RDB和复制功能对过期影响

生成RDB
执行SAVE或BGSAVE的时候创建一个新的RDB,已过期的key不会保存

加载RDB: 主服务器模式运行的时候,会对RDB文件检查,过期舍去
从服务器都会加载到数据库,但是主服务器同步数据的时候,从服务器数据清空,所以也不影响。

AOF文件写入
没有被惰性删除或者定时删除的,会写入到AOF文件里面,真正删除后增加删除命令

AOF重写

  • 复制
    当服务器运行在复制模式下时,从服务器的过期动作由主服务器控制。

  • 主服务器在删除一个过期键,显示向所有的从服务器DEL命令

  • 从服务器执行客户端的读命令时,即使碰到过期 键也不会过期键删除。

  • 从服务器只有在接到主服务器发来的DEL命令之后,才会删除过期键。

相关文章

网友评论

      本文标题:服务器的数据库

      本文链接:https://www.haomeiwen.com/subject/hbryzktx.html