一、删除策略
1. 过期数据
- 在redis中的,设置了过期时间的数据
- 当一个数据过期后,并不会立刻从内存中删除
- 数据保存形式: 维护了一片value和对应的过期时间的区域
2. 删除策略
- 删除策略就指的是针对expires区域进行操作
- 保证不会因为大量expire,将服务器压垮
2.1 定时删除
创建一个定时器,当key有过期时间时,时间一到,定时器任务就会立即执行
将expires区域和k-v区域都删除
优点:节约内存
缺点:cpu压力较大,此时无论cpu负载量多高,都会占用cpu来释放,影响redis的吞吐量
2.2 惰性删除
数据过期后,并不会立刻删除
等到该数据下次访问的时候,redis才会删除该数据,并返回该值为nil
优点:节省cpu的资源
缺点:可能存在大量的,无人访问的数据会一直存在服务器
2.3 定期删除
每秒钟定期对redis中每个库的数据进行轮询
轮询的数据,对过期的数据随机删除一部分
如果随机删除的数据占轮训数据的比例超过一定值,继续轮询删除
二、逐出策略
- 如果所有的数据都没设定过期时间,那么数据就会一直保存
- 如果存入的数据量太多,那么就会出现redis的内存不足问题
- 逐出策略就是针对这个问题
- 新数据进入到redis中,如果内存不足,会多次逐出算法。如果依然失败,就会出现OOM错误
1 检测易失数据
1. volatile-lru: least recently used: 最近最少使用的数据淘汰
2. volatile-lfu:least frequently used: 最近使用次数最少的数据淘汰
3. volatile-ttl: 马上要过期的数据进行淘汰
4. volatile-random: 随机挑选数据淘汰
2 全库数据
1. volatile-lru: least recently used: 最近最少使用的数据淘汰
2. volatile-lfu:least frequently used: 最近使用次数最少的数据淘汰
3. volatile-random: 随机挑选数据淘汰
3 放弃数据驱除
noeviction: 禁止驱逐数据,可能引发OOM
默认配置
4. 配置方式
maxmemory-policy noeviction