美文网首页
Redis键的生存时间和过期时间

Redis键的生存时间和过期时间

作者: spiderM | 来源:发表于2018-12-10 22:34 被阅读0次

    一、设置键的过期时间

    Redis可以通过EXPIRE、PEXPIRE、EXPIREAT、PEXPIREAT对键设置有效期,使用TTL或者PTTL查看键的有效期,-1表示键是永久的,PERSIST可以移除一个键的过期时间。

    二、过期键的判定

    REDIS使用一个过期字典来保存键的过期时间,通过过期字典,程序可以用以下步骤判断键是否过期:
    (1)检查给定键是否存在过期字典:如果存在,那么取得键的过期时间
    (2)检查当前UNIX时间戳是否大于键的过期时间:如果是,则过期

    三、过期键删除策略

    存在三种删除策略:
    (1)定时删除
    在设置键的过期时间的同时,创建一个定时器,让定时器在键的过期时间来临时,立即执行对键的删除操作。
    优点:通过使用定时器,可以保证过期键会尽可能快的被删除,被释放过期键所占用的内存。
    缺点:①对CPU时间是最不友好的:在过期键比较多的情况下,删除过期键这一行为会占用很多的CPU时间,在内存不紧张但是CPU紧张的情况下,这种策略反而会对服务器的响应时间和吞吐量造成影响。②创建一个定时器需要用到Redis服务器中的时间事件 ——redis中是使用无序链表实现的,查找一个事件的时间复杂度为O(N),并不能高效的处理大量时间事件。
    (2)惰性删除
    放任键过期不管,但是每次从键空间中获取键时,都检查取得的键是否过期,如果过期的话,就删除该键。
    优点:对CPU友好
    缺点:如果一个键已经过期,而这个键又仍然保留在数据库中,那么只要这个过期键不被删除,所占用的内存就不会释放。过期且长期不使用的键可以看成一种内存泄漏。
    (3)定期删除
    每隔一段时间进行一次检查,删除里面的过期键。定期删除是前两种方案的一种折中。
    难点:确定删除操作执行的时长和频率。
    Redis中使用的删除策略是惰性删除和定期删除

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

    RDB

    1.生成RDB文件:执行SAVE或者BGSAVE命令时,已过期的键不会被写入RDB文件。
    2.载入RDB文件:
    (1) 如果服务器以主服务器模型运行, 程序会对文件中保存的键进行检查,过期的键不会被载入到数据库中。
    (2)如果服务器以从服务器模式运行,不论文件中保存的键是否过期,都会被载入到数据库中。不过因为主从服务器在进行同步的时候,从服务器的数据库会被清空,所以过期键对RDB载入的服务器也不会造成影响。

    AOF

    1.AOF文件写入:当服务器以AOF持久化模式运行时,如果某个键已经过期,但是还没有被惰性删除或者定时删除时,不会对AOF文件产生任何影响。当过期键被惰性删除或者定时删除后,想AOF文件中追加(append)一条DEL命令。
    2.AOF文件重写:在执行AOF文件的过程中,程序会对数据库中的键进行检查,已过期的键不会被保存到重写后的AOF文件中。

    复制

    当服务器运行在复制模式下时,从服务器的过期键删除动作由主服务器控制:
    主服务器在删除一个过期键之后会想从服务器发送一个DEL命令
    从服务器在执行读命令时,即使碰到过期键也不会将过期键删除,而是继续像处理未过期的键一样处理过期键
    从服务器只有接收到主服务器的DEL命令时才会删除过期键。

    相关文章

      网友评论

          本文标题:Redis键的生存时间和过期时间

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