zoukankan      html  css  js  c++  java
  • 4-redis数据过期策略

    1 基本

      redis也许只是用来存放临时数据。比如股市行情、游戏中一个持续一个月的活动等,都属于缓存数据,过了一段就没用了。如果没有过期策略,就会有大量垃圾数据在内存中堆积。

    2 TTL

      time to live,键的生存时间/过期时间。客户端可以以s或者ms为单位为db中的key设置过期时间。当经过这个时间后,key的TTL就为0(就是一个计时的时间戳到期)。

      ttl的计算方式为:在db中有一个过期字典,保存了key的指针对象和过期时间戳。

      使用expire命令设置key的ttl为5s,5s后key就过期。

    127.0.0.1:6379> get aid
    "1"
    127.0.0.1:6379> EXPIRE aid 5
    (integer) 1
    127.0.0.1:6379> get aid
    "1"
    127.0.0.1:6379> get aid
    (nil)

       使用ttl命令显示key的过期时间

    127.0.0.1:6379> expire cid 60
    (integer) 1
    127.0.0.1:6379> ttl cid
    (integer) 56
    

       未设定过期的key的ttl为-1,已经过期的为-2

    127.0.0.1:6379> TTL bid
    (integer) -2
    127.0.0.1:6379> TTL cid
    (integer) -1
    

    3 过期键删除策略

      定时删除:主动策略,在key设定ttl时,就设定一个timer,当key过期,就马上删除key。

      惰性删除:被动策略,当key过期时放任不管。下次在键空间中获取key时,发现key过期的话,则删除,没有过期就返回键值。

      定期删除:主动策略,每隔一段时间对db做一次检查,删除里面的过期key。

      定时删除对内存友好,但消耗大量cpu。惰性删除对cpu优化,但会在内存中存留大量垃圾。

      合理的定期删除策略是折中和优秀的,根据业务类型,可以知道key的大概有效时间,然后给出ttl,比如为一个月。然后每个月对key执行定期删除。这样,既保证了cpu不被大量消耗,也保证了内存中不存留大量垃圾。

    4 RDB、AOF、复制对过期键的处理

      触发save命令时,过期键不会被保存到磁盘中。服务启动载入RDB文件时(假设rdb功能开启),会对其中的key进行过期检查,过期键不会载入。

      开启aof的情况下,key的过期不会有信息写入aof文件。而当定期删除时,会向aof文件中追加一个delete key的命令。

    5 企业中redis对过期的处理方式

  • 相关阅读:
    uva 147 Dollars
    hdu 2069 Coin Change(完全背包)
    hdu 1708 Fibonacci String
    hdu 1568 Fibonacci
    hdu 1316 How Many Fibs?
    poj 1958 Strange Towers of Hanoi
    poj 3601Tower of Hanoi
    poj 3572 Hanoi Tower
    poj 1920 Towers of Hanoi
    筛选法——素数打表
  • 原文地址:https://www.cnblogs.com/jabbok/p/8603710.html
Copyright © 2011-2022 走看看