Redis——数据淘汰策略

文章目录

  • [1. 引入](#1. 引入)
  • [2. 讲解](#2. 讲解)
    • [2.1 Redis 中的 8 种数据淘汰策略](#2.1 Redis 中的 8 种数据淘汰策略)
    • [2.2 LRU 和 LFU 算法](#2.2 LRU 和 LFU 算法)
    • [2.3 建议](#2.3 建议)
  • [3. 总结](#3. 总结)

1. 引入

Redis------数据过期策略 的"引入"部分讲解过,Redis 的数据存在内存中,而内存容量相对较小,不能将大量数据 无限期 地缓存。然而,对于有些场景,例如 缓存击穿 的解决方案二------逻辑过期,需要将一部分数据 "无限期" 地缓存到 Redis 中;或者在某一时间段内,海量查询请求使得大量数据缓存到 Redis 中。

那么当缓存的数据越来越多,直至 Redis 的最大内存限制时,Redis 会如何应对呢?这就涉及到本文要讲的 数据淘汰策略 (缓存淘汰策略 ),即 Redis 在内存达到最大限制时,为了释放空间,选择键删除的方式

2. 讲解

2.1 Redis 中的 8 种数据淘汰策略

Redis 的数据淘汰策略共有 8 种:

  • noeviction:不淘汰任何键,内存达到最大限制后不允许写入新数据,是 默认策略
  • volatile-ttl:对设置了 TTL (Time-to-Live,过期时间) 的键,比较键的剩余 TTL 值,TTL 越小的值,越先淘汰。
  • allkeys-random:对于所有键,随机选择并淘汰。
  • volatile-random:对于设置了 TTL 的键,随机选择并淘汰。
  • allkeys-lru:对于所有键,基于 LRU 算法进行淘汰。
  • volatile-lru:对于设置了 TTL 的键,基于 LRU 算法进行淘汰。
  • allkeys-lfu:对于所有键,基于 LFU 算法进行淘汰。
  • volatile-lfu:对于设置了 TTL 的键,基于 LFU 算法进行淘汰。

在 Redis 的 redis.conf 配置文件中,配置方式如下:

conf 复制代码
maxmemory-policy allkeys-lru # 使用 对所有键按 LRU 淘汰 的策略

2.2 LRU 和 LFU 算法

  • LRU (Least Recently Used,最近最少使用):重点关注数据的 使用时间 ,淘汰 最久未使用 的数据。假如三个键 name, age, weight 从前到后依次缓存到 Redis 中,并且使用的顺序为 age -> name -> weight -> name,如果需要基于 LRU 淘汰,则淘汰的优先级是 age > weight > name
  • LFU (Least Frequently Used,最少频率使用):重点关注数据的 使用频率 ,淘汰 使用频率最低 的数据。

2.3 建议

  • 一般情况下,使用 allkeys-lru 策略,把 最近最常用 的数据留在缓存中。因为大部分情况下,数据都是有 冷热 之分的,也就说有些数据 访问频率 高,有些低;然而 很久之前的 访问频率高的 数据再被访问的可能性不大,所以不需要缓存很久之前的数据。综上所述,一般情况适合使用 allkeys-lru 策略。

3. 总结

当 Redis 的内存达到最大限制时,Redis 会根据指定数据淘汰策略,选择一些数据进行淘汰。其中,需要重点理解 LRU (淘汰最久未使用的数据) 和 LFU (淘汰使用频率最低的数据) 这两种算法。在生产中,建议使用 allkeys-lru 这种数据淘汰策略,保存 最近最常用 的数据。

相关推荐
二进制person36 分钟前
Java EE初阶 --多线程2
java·开发语言
007php0071 小时前
某游戏大厂 Java 面试题深度解析(四)
java·开发语言·python·面试·职场和发展·golang·php
西西学代码2 小时前
Flutter---个人信息(5)---持久化存储
java·javascript·flutter
陈果然DeepVersion2 小时前
Java大厂面试真题:Spring Boot+Kafka+AI智能客服场景全流程解析(五)
java·spring boot·kafka·向量数据库·大厂面试·rag·ai智能客服
FAFU_kyp2 小时前
Spring Boot 邮件发送系统 - 从零到精通教程
java·网络·spring boot
脚踏实地的大梦想家3 小时前
【Docker】P2 Docker 命令:从Nginx部署到镜像分享的全流程指南
java·nginx·docker
Blossom.1183 小时前
把AI“编”进草垫:1KB决策树让宠物垫自己报「如厕记录」
java·人工智能·python·算法·决策树·机器学习·宠物
芒克芒克3 小时前
ssm框架之Spring(上)
java·后端·spring
消失的旧时光-19433 小时前
Android ble理解
java·kotlin
晨晖23 小时前
SpringBoot的yaml配置文件,热部署
java·spring boot·spring