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对过期的处理方式

  • 相关阅读:
    Common Lisp 参数传递的几种形式
    EF架构~基于EF数据层的实现
    标准架构~业务层到底是否应该关注数据持久化的方式
    Redis学习笔记~Redis主从服务器,读写分离
    Redis学习笔记~是时候为Redis实现一个仓储了,RedisRepository来了
    MVVM架构~knockoutjs系列之数组的$index和$data
    【Oracle】-【sqlplus / as sysdba登录报错问题】-新用户使用sqlplus / as sysdba登录报错
    Android---App Widget(一)
    Mit 分布式系统导论,Distributed Systems ,lab1 -lab6 总结,实验一到实验六总结
    GDAL切割重采样遥感图像
  • 原文地址:https://www.cnblogs.com/jabbok/p/8603710.html
Copyright © 2011-2022 走看看