背景:

  • Redis 是个基于内存的缓存数据库,既然是基于内存的,那肯定就会有存满的时候,再有新的数据就存不进去了。

  • 此时 Redis 会执行已经定义好的一些淘汰策略,本文大概讲一下 Redis 的 8 种数据淘汰策略。

1.简介

8种内存淘汰策略:

当 Redis 达到最大内存限制时,Redis会确切地使用配置好的最大内存策略指令来执行。相关策略如下:

1.noeviction(默认策略): 不会删除任何数据,拒绝所有写入操作并返回客户端错误消息(error)OOM command not allowed when used memory,此时 Redis 只响应删和读操作;

2.allkeys-lru 从所有 key 中使用 LRU 算法进行淘汰(LRU 算法:最近最少使用算法);

3.allkeys-lfu 从所有 key 中使用 LFU 算法进行淘汰(LFU 算法:最不常用算法,根据使用频率计算,4.0 版本新增);

4.volatile-lru 从设置了过期时间的 key 中使用 LRU 算法进行淘汰;

5.volatile-lfu 从设置了过期时间的 key 中使用 LFU 算法进行淘汰;

6.allkeys-random 从所有 key 中随机淘汰数据;

7.volatile-random 从设置了过期时间的 key 中随机淘汰数据;

8.volatile-ttl 在设置了过期时间的key中,淘汰过期时间剩余最短的。

注意: 当使用 volatile-lru、volatile-lfu、volatile-random、volatile-ttl 这四种淘汰策略时,如果没有 key 可以淘汰,则和 neoviction 一样返回错误。


2.如何选择使用哪种淘汰策略

​ 根据应用程序的访问模式,选择正确的淘汰策略很重要,但是你可以在程序运行时重新配置策略,并使用 Redis 的 info 命令 输出来监控缓存未命中和命中的数量,以调整设置。

  • keyspace_hits:缓存命中的次数
  • keyspace_misses:没有命中的次数
  • 缓存命中率 = keyspace_hits / (keyspace_hits + keyspace_misses)

一般根据经验来说:

  • 使用 allkeys-lru 策略场景:

    1.当你期望元素的子集将比其他元素更频繁地被访问时,比如幂律分布,20%的数据占有80%的使用次数;

    2.当你不确定使用哪种策略时。

  • 使用 allkeys-random 策略场景:

    1.当你有一个循环访问,其中所有 key 进行会被连续地访问;

    2.当你希望所有 key 的分布比较均匀。

  • 使用 volatile-ttl 策略场景:

    1.当你大部分缓存都设有不同的 ttl 值,向 Redis 提供过期候选的提示时。

注意: 给 key 设置过期时间会占用内存,因此使用 allkeys-lru 这样的策略更节省内存,因为在内存压力下不需要过期配置就可以收回密钥。


3.查询、设置内存淘汰策略

1)查询当前内存淘汰策略

127.0.0.1:6379> config get maxmemory-policy

2)获取Redis能使用的最大内存大小

127.0.0.1> config get maxmemory

说明:

  • 如果不设置最大内存大小或设置最大内存大小为 0,

  • 在 64 为操作系统下不设置内存大小,

  • 在 32 为操作系统下最多使用 3GB 内存。

    32 位的机器最大只支持 4GB 的内存,而系统本身就需要一定的内存资源来支持运行,所以 32 位机器默认限制最大 3GB 的可用内存。

3)设置淘汰策略

方法一:通过配置文件设置淘汰策略(修改 redis.conf 文件):

maxmemory-policy allkeys-lru

方法二:通过命令修改淘汰策略(临时生效,重启恢复):

127.0.0.1:6379> config set maxmemory-policy allkeys-lru

4)设置 Redis 最大占用内存大小

设置 Redis 最大占用内存大小为 100M(临时生效,重启恢复):

127.0.0.1:6379> config set maxmemory 100mb

整理完毕,完结撒花~





参考地址:

1.官方文档,https://redis.io/docs/reference/eviction/

2.Redis学习(二)原理篇,https://blog.csdn.net/qq_33204709/article/details/122326901

3.Redis 6种淘汰机制,看看你知道哪些?,https://blog.csdn.net/qq_42914528/article/details/126151403

Redis的8种内存淘汰机制

相关文章

  1. PTV Vissim学习

    PTV Vissim学习VissimVissim分布-期望速度Vissim分布-颜色-时间Vissim车辆类型&车辆类别Vissim驾驶行为&路段驾驶行为Vissim显示类型&层Vissim仿真参数Vissim背景底图Vissim路段&连接器Vissim如何规范地画路口Vissim车辆输入Vissim静态路线1Vissim解决车卡路口…...

    2023/6/1 15:06:48
  2. 黑苹果引导介绍篇

    引导篇 1、EFI分区:全称是EFI System Partition(ESP),是一个使用FAT16或FAT32的系统引导物理分区,支持EFI模式的电脑需要从ESP分区启动系统,EFI固件可从ESP加载EFI启动程序或者应用。目前主流的Clover安装的黑苹果,普…...

    2023/6/1 13:59:19
  3. Mybatis动态SQL(DynamicSQL)

    目录 1. if 2. where 3. ​​​​​​​trim 4. choose when otherwise 5. foreach 6. sql 1. if if通过test属性中的表达式判断标签中的内容是否有效&#xff08;是否拼接到sql中&#xff09; <if test" "> 条件判断&#xff0c;test为条件语句 2. wh…...

    2023/6/8 8:48:30
  4. 性能测试-Jmeter的三个重要组件(重点)

    性能测试-Jmeter的三个重要组件&#xff08;重点&#xff09;1、线程组的介绍2、线程组的分类3、线程组的属性4、 HTTP请求4、查看结果数4.1 如何查看HTTP消息请求和响应内容&#xff1f;如何解决Jmeter查看结果数的响应中中文乱码&#xff1f;1、线程组的介绍 特点&#xff1…...

    2023/6/3 10:18:31
  5. Elasticsearch分词器

    一、什么是分词器 二、分词器的组成 三、Elasticsearch默认分词器 四、_anlyzer API进行分词测试 一、什么是分词器 把全文本转为为一些列单词的过程&#xff0c;也叫分词 分词是通过分词器来实现的 注意&#xff1a; 除了在数据写入时进行词条转化&#xff0c;匹配Query时…...

    2023/6/8 18:00:48
  6. Cloud Computing之时钟和顺序Time and Ordering

    文章目录Total orderImplementation of total orderLinearizabilityFIFO rderImplementation of FIFO-orderHappen-before orderingCausal orderingSummary参考文献&#xff1a;Lamport’s logical clock 这章重点介绍了分布式系统下各种类型的时序&#xff0c;其实在分布式场景…...

    2023/6/2 0:42:39
  7. 2023最新SSM计算机毕业设计选题大全(附源码+LW)之java星光之夜香水网站的设计与开发bfmcr

    大学计算机专业毕业的&#xff0c;实际上到了毕业的时候&#xff0c;基本属于会与不会之间。说会&#xff0c;是因为学了整套的理论和方法&#xff0c;就是所谓的科班出身。说不会&#xff0c;是因为实践能力极差。 不会的问题&#xff0c;集中体现在毕设的时候&#xff0c;系…...

    2023/6/7 1:11:41
  8. 删除链表的倒数第 N 个结点

    题目 给你一个链表&#xff0c;删除链表的倒数第 n 个结点&#xff0c;并且返回链表的头结点。 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,4,5], n 2 输出&#xff1a;[1,2,3,5] 示例 2&#xff1a; 输入&#xff1a;head [1], n 1 输出&#xff1a;[] 示例 3&a…...

    2023/6/2 19:37:26
  9. 最强大脑记忆曲线(9)——按错误频率排序待听写内容

    目录一、增加“过程评价类”字段及“最后一次评价”字段二、修改脚本2.1 修改评卷脚本2.2 排序待听写内容写下本篇内容&#xff0c;完全出于“让自己的思路看得见” &#xff0c;技术层倒没有什么难点。核心思想&#xff1a;增加几个评价过程数据字段、并给最近评价结果以较高权…...

    2023/6/2 17:37:48
  10. 分布式锁的特点和实现

    分布式锁 什么是分布式锁 满足分布式系统或集群模式下多进程可见并且互斥的锁 分布式锁具有的特点 高可用多进程可见互斥高性能安全性 分布式锁的实现 分布式锁的核心是实现多进程之间互斥&#xff0c;而满足这一点的方式有很多&#xff0c;常见的有三种&#xff1a; My…...

    2023/5/24 11:00:48
  11. 搜索技术【广度优先搜索】 - 双向广度优先搜索 【HDU No. 3085】魔鬼II Nightmare Ⅱ

    搜索技术【广度优先搜索】 - 双向广度优先搜索 【HDU No. 3085】魔鬼II Nightmare Ⅱ 双向搜索指分别从初始状态和目标状态出发进行搜索&#xff0c;在中间交会时即搜索成功。从一个方向搜索时&#xff0c;分支数会随着深度的增加而快速增长&#xff0c;产生一个大规模的搜索树…...

    2023/6/1 23:36:26
  12. 实现注册与登录模块

    目录 1、加载依赖 2、实现jwt工具类jwtUtil类 3、实现config.filter.JwtAuthenticationTokenFilter类 4、配置config.SecurityConfig类 5、创建后端api之前对数据库进行修改 6、写API一共需要的三个地方 7、实现三个接口 8、验证用户登录用API调试 9、https://jwt.io/解…...

    2023/6/7 20:43:22
  13. java教师科研成果管理系统

    教师权限: 教师密码管理&#xff1a;教师在成功登录后可以对自己的登陆密码进行修改&#xff1b; 教师个人信息管理&#xff1a;教师对自己研究相关课题信息的添加与查看操作&#xff0c;以及提交和查看自己的研究课题&#xff1b; 个人成果与奖惩管理&#xff1a;添加教师的个…...

    2023/6/3 10:09:21
  14. Docker(五)—— 镜像原理、容器快照commit

    一、如何得到镜像 1&#xff09;从远程仓库下载 2&#xff09;朋友/同事拷贝给你 3&#xff09;自己制作DockerFile 二、联合文件系统 Docker的镜像是由一层层的文件系统组成&#xff0c;这种层级的文件系统叫做联合文件系统UnionFS。 三、Docker镜像加载原理 1. bootfs:…...

    2023/6/4 21:39:00
  15. java毕业设计在线售药系统Mybatis+系统+数据库+调试部署

    java毕业设计在线售药系统Mybatis系统数据库调试部署 java毕业设计在线售药系统Mybatis系统数据库调试部署本源码技术栈&#xff1a; 项目架构&#xff1a;B/S架构 开发语言&#xff1a;Java语言 开发软件&#xff1a;idea eclipse 前端技术&#xff1a;Layui、HTML、CSS、…...

    2023/5/26 21:26:43
  16. 信奥中的数学:平面直角坐标系

    平面直角坐标系确定方向和距离&#xff0c;你会了吗&#xff1f; 平面直角坐标系确定方向和距离&#xff0c;你会了吗&#xff1f;_哔哩哔哩_bilibili 秒杀名师 初中数学七年级下册 平面直角坐标系的概念 秒杀名师 初中数学七年级下册 平面直角坐标系的概念_哔哩哔哩_bilibil…...

    2023/6/6 7:02:07
  17. 【ESP32_8266_WiFi (九)】JSON基础

    文章目录JSON基础1 JSON概念2 JSON语法规则要点3 JSON数据3.1 JSON数字数据示例3.2 JSON字符串数据示例3.3 JSON逻辑值数据示例3.4 JSON数组数据示例3.5 JSON对象数据示例3.6 JSON null 数据示例4 JSON 对象5 JSON数组6 6. JSON 对象与数组混合存放示例7 总结JSON基础 1 JSON概…...

    2023/6/7 2:11:04
  18. ORB-SLAM2 ---- Initializer::FindHomography函数

    目录 1.函数作用 2.Initializer::FindHomography函数构造函数 3.函数解析 3.1 每次RANSAC迭代中的细节 3.2 Initializer::CheckHomography函数解析 3.2.1 函数作用 3.2.2 函数解析 1.函数作用 计算单应矩阵&#xff0c;假设场景为平面情况下通过前两帧求取Homography…...

    2023/6/1 15:21:25
  19. Maven生命周期

    前言: 看gradle复习知识点的时候,发现这块以前记录过的丢失了,现在重新补一下,记录复习! Maven生命周期的理解 生命周期你可以理解为:构建工程的步骤。而Maven生命周期你就可以理解为:构建项目的过程中,清理、初始化、编译、打包、测试、部署等构建步骤。笼统的讲就…...

    2023/5/30 0:12:31
  20. 【MySQL 第十四天 数据库用户管理|日志管理|备份和恢复|数据表的导出和导入】

    【MySQL 第十四天 数据库用户管理|日志管理|备份和恢复|数据表的导出和导入【1】mysql数据库的用户管理【2】mysql数据库用户的权限管理【3】mysql数据库的日志管理【4】mysql数据库的备份和恢复【5】mysql数据表的导出【6】mysql数据库的导入【1】mysql数据库的用户管理 creat…...

    2023/5/24 7:54:13

最新文章

  1. Ae 效果详解:Mocha AE

    Ae菜单&#xff1a;效果/Boris FX Mocha/Mocha AE Effects/Boris FX Mocha/Mocha AE Ae菜单&#xff1a;动画/Track in Boris FX Mocha Animation/Track in Boris FX Mocha Mocha Pro 是一款强大的平面跟踪软件。既可作为独立软件运行&#xff0c;也提供了 Ae 的插件版本&#…...

    2023/6/9 12:17:44
  2. 【微信开发工具+MySQL+nodejs】实现线上账本管理系统

    页面和逻辑功能开发:小程序的形式写出来,用微信开发工具,数据库用MySQL实现线上账本管理系统 需求: 下面是一个初步的设计,仅供参考: 用户管理 (1) 用户注册:用户可以在小程序中注册一个账号,需要提供用户名、密码、手机号等信息。 (2) 用户登录:用户可以使用注册时…...

    2023/6/9 12:17:16
  3. Java开发中PO、VO、DAO、BO、DTO、POJO 含义

    PO(persistant object) 持久对象 可以看成是与数据库中的表相映射的java对象。使用 Mybatis 来生成 PO 是不错的选择。 VO(value object) 值对象 通常用于业务层之间的数据传递&#xff0c;和 PO 一样也是仅仅包含数据而已。但应是抽象出的业务对象&#xff0c;可以和表对应&am…...

    2023/6/9 12:17:02
  4. K8S | 核心原理分析

    整体上理解流程和原理&#xff1b; 一、背景 基于分布式的架构中&#xff0c;需要管理的服务是非常多的&#xff0c;无论是服务的数量还是体系划分&#xff1b; 从服务的能力上看&#xff0c;可以进行分层管控&#xff0c;只是其中有相当一部分服务层&#xff0c;改动更新的频…...

    2023/6/9 12:16:40
  5. 案例23:基于Java宿舍管理系统设计和实现开题报告

    博主介绍&#xff1a;✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专…...

    2023/6/9 12:16:27
  6. 本地安装 Stable Diffusion 教程 Mac 版本

    前面两篇讲了如何用免费的网络资源搭建 Stable Diffusion&#xff0c;有朋友问&#xff0c;有没有在本地搭建的教程。 以 MacBook Pro 为例&#xff0c;下面是安装步骤。 前置要求&#xff1a;Homebrew&#xff0c;Python 3.0。 如未安装Homebrew&#xff0c;请按照https://bre…...

    2023/6/9 12:15:53
  7. 注册中心AP、CP的区别

    要了解AP、CP的区别首先需要知道AP和CP是什么&#xff1f; AP、CP是分布式理论中的概念&#xff1a; 分布式理论是关于如何设计和构建大规模计算机系统的一门学科&#xff0c;其目的在于探讨如何将计算机资源有效地分配到多个计算节点上&#xff0c;以实现更高效、可靠和可扩…...

    2023/6/9 12:15:42
  8. chatgpt赋能python:用Python实现文本数字转换:从123到一二三

    用Python实现文本数字转换&#xff1a;从123到一二三 在网站开发中&#xff0c;我们经常需要将数字转换成文字&#xff0c;比如将123转成“一百二十三”。这种数字转文字的需求&#xff0c;既方便了用户的阅读&#xff0c;也提高了网站的可读性和SEO效果。 在本文中&#xff…...

    2023/6/9 12:15:29
  9. SpringMVC基于注解实现的全局异常处理

    使用全局统一处理某一类异常&#xff0c;能够减少代码的重复度和复杂度&#xff0c;有利于代码的维护。 1&#xff0c;局部控制 ExceptionHandler 使用ExceptionHandler注解作用在方法上面&#xff0c;参数是具体的异常类型。一旦系统抛出这种类型的异常时&#xff0c;会引导…...

    2023/6/9 12:14:57
  10. FFmpeg命令集合

    1、信息查询 命令 含义 -L 显示许可证 -h topic 显示帮助 -? topic 显示帮助 help topic 显示帮助 --help topic 显示帮助 -version 显示版本 -buildconf 显示生成配置 -formats 显示有效的格式 -muxers 显示有效的复用器 -demuxers 显示有用的解复用器 …...

    2023/6/9 12:14:44
  11. phpMyAdmin连接MySQL,出现服务器拒绝连接解决方法

    当你登录mysql的时候出现下面情况时 把config.inc.php删除就可以&#xff0c;或者修改config.inc.php里的 $cfg[Servers][$i][controluser] ; $cfg[Servers][$i][controlpass] ; 注释掉就会弹出来要求登陆。 例如我的文件位置是在C:\wamp\apps\phpmyadmin4.1.14&#xff…...

    2023/6/9 12:14:32
  12. Vue 中的数据请求如何进行拦截与错误处理

    Vue 中的数据请求拦截与错误处理 在 Vue.js 中&#xff0c;我们经常需要向后端服务器发送数据请求&#xff0c;以获取或提交数据。在这个过程中&#xff0c;我们可能会遇到一些问题&#xff0c;例如无效的请求参数、网络连接错误、服务器错误等。为了更好地处理这些问题&#…...

    2023/6/9 12:14:04
  13. 通过 Python 封装关键词搜索微店商品api接口

    可以使用 GET 或 POST 方法&#xff0c;请求参数中应包含搜索关键词、每页展示数量、当前页码等信息。 解析返回的 response 中的 HTML 页面或 JSON 格式数据&#xff0c;提取需要的商品信息&#xff0c;如商品标题、价格、评价人数等。 使用 pandas 库将提取的商品信息保存到数…...

    2023/6/9 12:13:50
  14. 【JUC基础】15. Future模式

    目录 1、前言 2、什么是Future 2.1、传统程序调用 3、JDK中的Future 3.1、Future相关API 3.2、FutureTask 3.2.1、FutureTask实现 3.2.2、FutureTask相关API 3.3、CompletableFuture 3.3.1、thenApply 3.3.2、异步任务编排之thenCompose() 3.3.3、异步任务编排之th…...

    2023/6/9 12:13:36
  15. docker harbor私有仓库部署

    docker harbor私有仓库部署 docker system prune -a 删除停掉的服务&#xff0c;自定义网络等。 docker 私有仓库 docker配置文件 vim /etc/docker.daemon.josn { “insecury-registries”: ["192.168.232.10:5000]&#xff0c;#指定私有仓库 } docker pull/push 19…...

    2023/6/9 12:13:21
  16. $1$驱动开发

    目录 1.驱动大纲&#xff1a; 2.单片机开发属于嵌入式开发吗&#xff1f; 3.RAM裸机代码和驱动有什么区别&#xff1f; 4.Linux系统的组成 5.宏内核、微内核 6.驱动移植 1.驱动大纲&#xff1a; &#xff08;1&#xff09;内核模块 &#xff08;2&#xff09;字符设备驱…...

    2023/6/9 12:12:52
  17. 【Rust日报】2023-06-07 使用 C++ 编写通用库并在 Rust 中使用它 (WASI)

    使用 C 编写通用库并在 Rust 中使用它 (WASI) WebAssembly 简介 WebAssembly 是一种二进制指令格式&#xff0c;旨在成为一种低级虚拟机&#xff0c;可以在 Web 浏览器中以接近本机的速度运行代码。它不特定于网络&#xff0c;也可以在其他平台上运行。WebAssembly 代码可以从各…...

    2023/6/9 12:12:22
  18. 2023/06/05 软件项目生存期和传统生存期模型

    视频参考地址&#xff1a; B站闫波软件项目管理视频学习. 视频资源&#xff1a;video P4-P6 本篇重点&#xff1a;项目生存期 简书日更计划同步记录&#x1f3c3;… 项目生命周期 软件项目生命周期 ∗ \color{red}{*} ∗ 项目生命周期的阶段 C概念/启动阶段&#xff1a;确立项…...

    2023/6/9 12:12:04
  19. 100种思维模型之放大关键行动思维模型-75

    很多时候&#xff0c;决定结果大小的是 关键行动的执行程度&#xff0c; 所以我们要适时 放大关键行动 &#xff01; 放大关键行动思维模型&#xff0c;一个 告诉我们 事前思考寻找能够破局的关键点&#xff0c;落实时要放大关键点上的行动 的思维模型。 01、何谓放大关键行动…...

    2023/6/9 12:11:11
  20. mysql 批量更新json list里的key字段

    mysql 批量更新json list里的字段。数组字段需要遍历数组&#xff0c;$[*] 好像不管用&#xff0c;所以写了个存储过程实现mysql 批量更新json list里的key字段 delimiter $$ drop procedure if exists updateUrlName; create procedure updateUrlName(in oldPassword varcha…...

    2023/6/9 12:10:36