【Redis | 第七篇】Redis过期策略、内存淘汰策略

文章目录

7.Redis过期策略、内存淘汰策略

7.1过期策略

我们在set key的时候,可以给它设置一个过期时间,比如expire key 60。指定这key60s后过期。

60s后,redis是如何处理的嘛?我们先来介绍几种过期策略:

  • 立即过期

每个设置过期时间的key都需要创建一个定时器,到过期时间就会立即对key进行清除。该策略可以立即清除过期的数据,对内存很友好;但是会占用大量的CPU资源去处理过期的数据,从而影响缓存的响应时间和吞吐量。

  • 惰性过期

只有当访问一个key时,才会判断该key是否已过期,过期则清除。该策略可以最大化地节省CPU资源,却对内存非常不友好。极端情况可能出现大量的过期key没有再次被访问,从而不会被清除,占用大量内存。

  • 定期过期

每隔一定的时间,会扫描一定数量的数据库的expires字典中一定数量的key,并清除其中已过期的key。该策略是前两者的一个折中方案。通过调整定时扫描的时间间隔和每次扫描的限定耗时,可以在不同情况下使得CPU和内存资源达到最优的平衡效果。

Redis中同时使用了惰性过期和定期过期两种过期策略。

  • 假设Redis当前存放30万个key,并且都设置了过期时间,如果你每隔100ms就去检查这全部的key,CPU负载会特别高,最后可能会挂掉。
  • 因此,redis采取的是定期过期,每隔100ms就随机抽取一定数量的key来检查和删除的。
  • 但是呢,最后可能会有很多已经过期的key没被删除。这时候,redis采用惰性删除。在你获取某个key的时候,redis会检查一下,这个key如果设置了过期时间并且已经过期了,此时就会删除

但是呀,如果定期删除漏掉了很多过期的key,然后也没走惰性删除。就会有很多过期key积在内存内存,直接会导致内存爆的。或者有些时候,业务量大起来了,redis的key被大量使用,内存直接不够了,运维小哥哥也忘记加大内存了。难道redis直接这样挂掉?不会的!Redis用8种内存淘汰策略保护自己~

7.2内存淘汰策略

8种:lru两个、lfu两个、随机两个、根据过期时间淘汰、报错

volatile-lru:当内存不足以容纳新写入数据时,从==设置了过期时间的key中使用LRU(最近最少使用)==算法进行淘汰;

allkeys-lru:当内存不足以容纳新写入数据时,从所有key中使用LRU(最近最少使用)算法进行淘汰。

volatile-lfu:4.0版本新增,当内存不足以容纳新写入数据时,在过期的key中,使用LFU(最少频率)算法进行删除key。

allkeys-lfu:4.0版本新增,当内存不足以容纳新写入数据时,从所有key中使用LFU算法进行淘汰;

volatile-random:当内存不足以容纳新写入数据时,从设置了过期时间的key中,随机淘汰数据;。

allkeys-random:当内存不足以容纳新写入数据时,从所有key中随机淘汰数据。

volatile-ttl:当内存不足以容纳新写入数据时,在设置了过期时间的key中,根据过期时间进行淘汰,越早过期的优先被淘汰;

noeviction:默认策略,当内存不足以容纳新写入数据时,新写入操作会报错。

相关推荐
wangchunyu11410 小时前
PostgreSQL 入门与实践:从零搭建一个 CRUD 应用
数据库·postgresql
涛思数据(TDengine)10 小时前
从_找根因_到_搭系统_:工业 AI 实战直播(十、十一期)
大数据·数据库·人工智能·时序数据库·tdengine
李昊哲小课11 小时前
Spring Boot 4 旅游主题实战教程 阶段四:缓存与底层进阶
spring boot·redis·缓存·性能优化·log4j·旅游·性能
qq_3391911411 小时前
mysql磁盘占用排查,mysql存储空间占比统计,mysql判断哪张表占用磁盘空间大
数据库·mysql
东方护航数据恢复(深圳)11 小时前
SSD主控损坏后的芯片级提取:FTL映射表重建与NAND直读
大数据·数据库
光锥智能12 小时前
OceanBase领跑数字政府数据库选型:产品能力、市场潜力、技术潜力均居首
数据库·人工智能·oceanbase
风哥2号12 小时前
达梦DM数据库恢复工具FGDDU(FGEDU DM DUL)
数据库·达梦数据库·数据库恢复
2601_9600176213 小时前
啤酒行业PLM突围战:一半科技以配方与工艺数字化重构酿造食品研发体系
数据库·科技·重构
GIS数据转换器13 小时前
智慧林草“一张图“平台
java·大数据·服务器·前端·javascript·数据库·人工智能