美文网首页
Redis数据库浅析

Redis数据库浅析

作者: 剑客kb | 来源:发表于2018-11-13 09:04 被阅读0次

    相关命令

    FLUSHDB

    删除当前Redis DB的所有的key

    FLUSHALL

    删除所有Redis DB的所有的key

    EXPIRE、PEXPITE、EXPIREAT、PEXPIREAT

    EXPIRE 以秒为单位设置过期时间 now+设置的时间
    PEXPITE 以毫秒为单位设置过期时间 now+设置的时间
    EXPIREAT 以时间戳为单位设置过期时间 过期时间=时间戳
    这三者都是通过PEXPIREAT来实现的

    PERSIST

    移除一个key的过期时间

    TTL、PTTL

    已秒和毫秒为单位返回一个key过期时间和当前时间之差

    过期键删除策略

    定时删除

    对每一个key设置一个定时器,在key过期时删除key;优点是能及时删除过期key,释放内存,但是会占用太多CPU资源

    惰性删除

    在每次访问key时,判断key是否过期,过期删除

    定期删除

    每隔一段时间,对Redis数据库进行检查,删除过期键;至于检查多少个数据库、多少个键,由算法决定(分多次遍历数据库,从expires字典中随机取出部分键进行检查,删除其中过期键,同时每次遍历的处理时间会有限制,到达后自动停止,同时下一次执行的时候会接着上一次处理结束处继续)

    Redis目前采用的删除策略是惰性删除和定期删除相结合

    AOF、RDB和复制功能对过期键处理

    • 生成RDB文件和主服务器载入RDB文件都会自动忽略过期的键
    • 从服务器载入RDB文件时,会对所有的键进行载入
    • 当服务器以AOF模式运行时,过期键还未被惰性删除或定期删除时,AOF文件不会有任何处理,当该键被删除时,程序会往AOF文件中加入一条DEL命令表示该键被删除了
    • AOF重写时,过期的键不会被写入
    • 当服务器运行在复制模式下,从服务器删除过期键的动作有主服务器控制:主服务器删除过期键时会往各从服务器同步;从服务器上读到过期键时,不会删除。 有点疑问 在redis3.0.x版本中,从服务器从能够读到已经过期的key,而主上读不到,从而导致主从不一致。 在redis3.2.x版本中,该bug已修复(修复方式:3.2.8版本中,slave上的键的删除逻辑与3.0.7相同,即需要master发删除键的命令,只是发现key过期时,逻辑返回null)

    重点

    • Redis数据库主要由俩个字典组成:dict保存键值对;expires保存键过期时间,过期时间是一个时间戳
    • 当Redis命令对数据库进行了修改时,服务器会根据配置(客户端可以订阅键空间通知(某个键执行了什么命令)或键事件通知(某个命令被执行了))向客户端发送通知

    相关文章

      网友评论

          本文标题:Redis数据库浅析

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