redis学习之淘汰策略和过期策略

淘汰策略

内存配置
redis内存配置参数为  maxmemory=0 
redis默认配置使用系统最大内存,不过依照经验来看,最好配置为系统内存的 3/4
淘汰策略的分类
概念说明
lru 全称为 least recently used 最近最少使用
lfu 全程为 least frequency used 最少频率使用
具体分类
  1. volatile-lru 从设置了过期时间的数据集中找到最近最少使用的进行回收
  2. volatile-lfu 从设置了过期时间的数据集中找到最少频率使用的进行回收
  3. volatile-random 从设置了过期时间的数据集中随机进行回收
  4. volatile-ttl 从设置了过期时间的数据集中挑选将要过期的进行回收
  5. allkeys-lru 从所有key中找到最近最少使用的进行回收
  6. allkeys-lfu 从所有key中找到最小频率使用的进行回收
  7. allkeys-random 从所有key中随机进行回收
  8. no-evaction 不进行回收,直接抛出异常
使用说明
系统默认使用的是 no-evaction 策略
根据经验或者应用场景,我们一般配置 volatile-lru 策略
在 redis4.0 后新增了 lfu两种内存回收策略

过期删除策略

分类
分类说明优势劣势
定时删除key值设置过期时间后,redis会开启新的线程进行倒计时,倒计时结束后会进行删除操作删除比较及时,节约内存消耗cpu资源
惰性删除当读取数据(get,hget操作)的时候,会调用expireIfNeeded函数删除过期的数据,该函数判断当前获取数据是否过期,如果已经过期,调用dbDelete函数把它从数据库中删除. dbDelete函数除了删除数据外,还会把数据的过期时间信息删除节省cpu资源很多不活跃的key值不会触发回收,导致内存占用较大
定期删除每隔一段时间,会对设置过期时间的键进行检查,删除里面的过期键对cpu比较友好仍然会有部分key值占用内存,导致内存占用过多

redis默认会采用 定期删除+惰性删除的方式,来达到内存和cpu的消耗平衡

RDB和AOF对过期键的处理

RDB
  1. 执行save或者bgsave命令会创建一个新的RDB文件,程序会对数据库中的键进行检查,对已过期的键不会存储到新的RDB文件中, 数据库中包含过期键不会对新生成的RDB文件产生影响
  2. 如果服务器以主从模式运行,会有下面的区别
    2.1 服务器已主服务器运行,载入RDB文件时,程序对文件中保存的过期键进行检查,未过期的会被载入数据库,已过期的会被忽略.所以过期键对载入RDB文件的主服务器不会有影响
    2.2 服务器已从服务器运行,载入RDB文件时,文件中保存的所有键,无论是否过期,都会载入数据库中,因为主从服务器进行数据同步的时候,从服务器的数据库会被清空,所以过期键对载入RDB的从服务器也不会有影响
AOF
AOF文件写入

当服务器以AOF持久化模式运行时,如果数据库中的某个键已经过期,但是还没被惰性删除和定期删除,AOF文件也不会因为这个过期键产生影响

  1. 过期键呗惰性删除/定期删除后,redis会向AOF文件追加一条DEL命令,显示记录该键被删除
AOF重写

在执行AOF重写过程,程序会对数据库中键进行检查,已过期的键不会被保存到重写后的AOF文件中

推荐

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值