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

服务器的数据库

作者: 鸿雁长飞光不度 | 来源:发表于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