Redis内存淘汰策略

介绍

 Redis作为高性能的内存数据库,其内存资源的高效管理直接关系到系统的稳定性和性能。当Redis的内存达到配置的最大值(maxmemory)时,新的写入操作将触发内存淘汰机制(Eviction Policy),以释放空间存储新数据。本文将深入探讨Redis的内存淘汰策略 、实现原理 、适用场景 及最佳时间。

1.概述

 Redis的内存淘汰策略决定了在内存不足时,如何选择需要删除的健来释放空间。策略整体可以分为两大类:

  • 基于过期时间的淘汰(volatile-*):仅针对设置了过期时间的键。
  • 全局淘汰(allkeys-*):针对所有键,无论是否设置过期时间。

通过maxmemory参数来设定内存的使用上限,当Redis使用内存达到设定的最大值的时候,会根据配置文件中的策略选取要删除的key来删除,从而给新的键值留出空间

2.内存淘汰策略

 Redis支持以下8种内存淘汰策略:

2.1 基于过期时间的淘汰(volatile-*)

  volatile-* 相关策略,淘汰key的范围为设置了过期时间的key。

volatile-lru

 策略 :优先删除最近最久未被使用的key(LRU算法实现)。

 实现 :

  1.Redis会维护一个淘汰池(一个链表)

  2. 新数据插入到链表头部

  3. 每当缓存命中(即缓存数据被访问),将数据移到链表头部

  4.当内存不足时,会从淘汰池中的尾部拿取一个最适合淘汰的数据

取样模式(配置maxmemory-samples属性)从Redis中获取随机的取样数据,避免一次性读取All Key影响性能。

在取样的数据中,根据淘汰算法找到最合适淘汰的数据

  5.将需要淘汰的数据从Redis中删除,并且从淘汰池移除

  6.当链表满的时候,将链表尾部的数据丢失

 适用场景:适用缓存场景,优先保留热点数据。

volatile-lfu

 策略 :优先删除使用频率(次数)最少的 key。(LFU算法实现:Least frequently used)

 实现 :通过计数器统计键的访问频率,并随时间衰减历史计数,避免长期积累导致无法淘汰旧key。

 适用场景:适合长期缓存,如高频访问的静态数据。

volatile-ttl

 策略 :优先删除剩余时间(ttl - time to live)最短的key。

 适用场景:适用于明确知道key生命周期的场景(如:临时会话数据)

volatile-random

 策略 :随机删除key

 适用场景:内存压力大且数据重要性均等时,快速释放内存。

2.2 全局淘汰(allkeys-*)

  allkeys-* 相关策略,淘汰key的范围为全局范围内的key。相关策略的实现与volatile-*相关策略的实现一样,两者的区别只在key选择范围的不同。

allkeys-lru

 策略:优先删除最近最久未未被使用的key(LRU算法实现)

allkeys-lfu

 策略:优先删除最近最久未未被使用的key(LRU算法实现)

allkeys-random

 策略:随机删除淘汰范围内的 key。

2.3 Redis默认策略

noeviction

  Redis默认策略,当内存不足时,写请求会直接报错(DEL请求可以继续服务),读请求可以继续进行;

3.知识图谱

相关推荐
imDwAaY12 小时前
操作系统如何管理程序运行?从线程、进程到内存隔离与用户态切换:CS162 Note2
android·java·redis
码途行者13 小时前
处理超时未支付订单:两套轻量化方案,附 PHP 极简实现
开发语言·redis·php
草莓熊Lotso17 小时前
【C++ 基于微服务的即时通讯系统】etcd + brpc 从安装到服务注册发现全链路实战
网络·数据库·c++·redis·微服务·etcd
Chenyu_3101 天前
DPDK、TC 和 XDP:Linux 高性能网络到底在优化什么
linux·服务器·网络·缓存
我不会起名字3221 天前
Redis 突然只能读不能写:MISCONF 报错的 3 类触发条件与 4 步恢复
运维·redis·持久化·排查·misconf
我不会起名字3221 天前
Redis 从 0 到 1(九):主库宕机 30 秒自动切主——1 主 2 从 3 哨兵 + Go 客户端
redis·docker·sentinel·高可用·哨兵
毕业设计7031 天前
(免费领源码)SSM董家湾线上点餐系统04682- java、PHP、python、C#、小程序、大数据、单片机、网络工程等)
java·redis·mysql·tomcat·maven·mybatis·ssm
用户094248568031 天前
第1章:Redis 术语全景与单线程工作原理
redis·快应用·源码阅读
hflmwl81 天前
RedisDesktopManager安装包中文版官方下载,redis可视化客户端工具下载
数据库·redis·缓存·可视化客户端工具
一枕槐安4871 天前
大模型应用后端设计:上下文管理、缓存、降级策略的工程方案总结
java·spring·缓存