Redis 的6种回收策略(淘汰策略)详解

Redis 的6种回收策略(淘汰策略)详解

  • 1、Redis的六种淘汰策略
    • [1. volatile-lru](#1. volatile-lru)
    • [2. volatile-ttl](#2. volatile-ttl)
    • [3. volatile-random](#3. volatile-random)
    • [4. allkeys-lru](#4. allkeys-lru)
    • [5. allkeys-random](#5. allkeys-random)
    • [6. no-eviction](#6. no-eviction)
  • 2、使用策略规则

|-----------------------------|
| 💖The Begin💖点点关注,收藏不迷路💖 |

在Redis中,当内存使用达到上限时,为了保持服务的稳定性和响应速度,Redis提供了多种数据回收(淘汰)策略,以便在必要时释放内存空间。本文将详细介绍Redis的六种主要淘汰策略。

1、Redis的六种淘汰策略

1. volatile-lru

  • 说明 :从已设置过期时间的数据集(server.db[i].expires)中挑选最近最少使用的数据进行淘汰。
  • 适用场景:适用于数据访问频率差异较大的场景,即部分数据访问频繁,部分数据访问较少。

2. volatile-ttl

  • 说明:从已设置过期时间的数据集中挑选那些即将过期的数据进行淘汰。
  • 适用场景:当希望优先淘汰那些即将过期的数据时,可以使用此策略。

3. volatile-random

  • 说明:从已设置过期时间的数据集中随机选择数据进行淘汰。
  • 适用场景:当数据集的访问频率没有明显差异,且希望随机淘汰过期数据时,此策略是一个不错的选择。

4. allkeys-lru

  • 说明 :从所有数据集(server.db[i].dict)中挑选最近最少使用的数据进行淘汰,不局限于已设置过期时间的数据。
  • 适用场景:如果数据访问频率呈现出幂律分布(即大部分数据访问频率低,少数数据访问频率高),此策略非常有效。

5. allkeys-random

  • 说明:从所有数据集中随机选择数据进行淘汰。
  • 适用场景:当数据集的访问频率几乎相同时,可以使用此策略。然而,由于Redis的设计初衷是快速存取,因此这种策略在实际应用中并不常见。

6. no-eviction

  • 说明:不进行任何淘汰操作,当内存不足时,Redis会拒绝新的写入请求,并返回错误。
  • 适用场景:在某些特定的场景下,如不希望因淘汰数据而影响业务逻辑时,可以使用此策略。但需要注意的是,这可能会导致Redis服务拒绝新的写入请求。

2、使用策略规则

  • 幂律分布场景 :如果数据访问频率呈现出幂律分布,即大部分数据访问频率低,少数数据访问频率高,推荐使用allkeys-lru策略。这可以确保那些长时间未被访问的数据被优先淘汰,从而为新的热点数据腾出空间。

  • 平等分布场景 :如果数据集的访问频率几乎相同,即所有数据的访问频率都相似,那么可以考虑使用allkeys-random策略。然而,在实际应用中,这种情况较为少见,因为大多数业务场景下的数据访问都会存在一定的差异。

|---------------------------|
| 💖The End💖点点关注,收藏不迷路💖 |

相关推荐
程序猿小D11 分钟前
[附源码+数据库+毕业论文]基于Spring+MyBatis+MySQL+Maven+jsp实现的个人财务管理系统,推荐!
java·数据库·mysql·spring·毕业论文·ssm框架·个人财务管理系统
zhuiQiuMX24 分钟前
脉脉maimai面试死亡日记
数据仓库·sql·面试
独行soc28 分钟前
2025年渗透测试面试题总结-2025年HW(护网面试) 33(题目+回答)
linux·科技·安全·网络安全·面试·职场和发展·护网
库森学长1 小时前
面试官:发生OOM后,JVM还能运行吗?
jvm·后端·面试
然我1 小时前
面试必问:JS 事件机制从绑定到委托,一篇吃透所有考点
前端·javascript·面试
钢铁男儿1 小时前
C# 接口(什么是接口)
java·数据库·c#
__NK2 小时前
【字节跳动高频面试题】不超过 N 的最大数拼接
面试·大厂·字节跳动·手撕
__风__2 小时前
PostgreSQL kv(jsonb)存储
数据库·postgresql
Databend2 小时前
Databend 产品月报(2025年6月)
数据库
爱学习的茄子2 小时前
React Hooks进阶:从0到1打造高性能Todo应用
前端·react.js·面试