当前位置: 首页 > news >正文

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.知识图谱

Redis内存淘汰策略.png

http://www.lqws.cn/news/211339.html

相关文章:

  • 【Linux】LInux下第一个程序:进度条
  • 东芝Toshiba e-STUDIO2110AC打印机信息
  • 数据结构算法(C语言)
  • Ctrl-Crash 助力交通安全:可控生成逼真车祸视频,防患于未然
  • 基于 Transformer robert的情感分类任务实践总结之二——R-Drop
  • altium designer2024绘制stm32过程笔记x`
  • WebRTC通话原理与入门难度实战指南
  • 从零开始制作小程序简单概述
  • Oracle 审计参数:AUDIT_TRAIL 和 AUDIT_SYS_OPERATIONS
  • SDC命令详解:使用set_port_fanout_number命令进行约束
  • AIGC的产品设计演进:从工具到协作者
  • 生成模型从自回归到变分自动编码器
  • 提供MD5解密的网站
  • WaytoAGI东京大会开启AI全球化新对话:技术无国界,合作促创新
  • 虚拟主机都有哪些应用场景?
  • C++11新增重要标准(下)
  • OTF字体包瘦身,保留想要的字
  • 【win | docker开启远程配置】使用 SSH 隧道访问 Docker的前操作
  • excel中数字不满六位在左侧前面补0的方法
  • python打卡第45天
  • 【自然语言处理】大模型时代的数据标注(主动学习)
  • 如何评估大语言模型效果
  • 机器学习-经典分类模型
  • 微前端 - Module Federation使用完整示例
  • Spring Boot + Thymeleaf 防重复提交
  • 算法练习-回溯
  • CKA考试知识点分享(2)---ingress
  • 【推荐算法】推荐算法演进史:从协同过滤到深度强化学习
  • 数据结构测试模拟题(4)
  • 【Go语言基础【13】】函数、闭包、方法