Redis的8种内存淘汰机制
背景:
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
相关文章
- PTV Vissim学习
PTV Vissim学习VissimVissim分布-期望速度Vissim分布-颜色-时间Vissim车辆类型&车辆类别Vissim驾驶行为&路段驾驶行为Vissim显示类型&层Vissim仿真参数Vissim背景底图Vissim路段&连接器Vissim如何规范地画路口Vissim车辆输入Vissim静态路线1Vissim解决车卡路口…...
2023/6/1 15:06:48 - 黑苹果引导介绍篇
引导篇 1、EFI分区:全称是EFI System Partition(ESP),是一个使用FAT16或FAT32的系统引导物理分区,支持EFI模式的电脑需要从ESP分区启动系统,EFI固件可从ESP加载EFI启动程序或者应用。目前主流的Clover安装的黑苹果,普…...
2023/6/1 13:59:19 - Mybatis动态SQL(DynamicSQL)
目录 1. if 2. where 3. trim 4. choose when otherwise 5. foreach 6. sql 1. if if通过test属性中的表达式判断标签中的内容是否有效(是否拼接到sql中) <if test" "> 条件判断,test为条件语句 2. wh…...
2023/6/8 8:48:30 - 性能测试-Jmeter的三个重要组件(重点)
性能测试-Jmeter的三个重要组件(重点)1、线程组的介绍2、线程组的分类3、线程组的属性4、 HTTP请求4、查看结果数4.1 如何查看HTTP消息请求和响应内容?如何解决Jmeter查看结果数的响应中中文乱码?1、线程组的介绍 特点࿱…...
2023/6/3 10:18:31 - Elasticsearch分词器
一、什么是分词器 二、分词器的组成 三、Elasticsearch默认分词器 四、_anlyzer API进行分词测试 一、什么是分词器 把全文本转为为一些列单词的过程,也叫分词 分词是通过分词器来实现的 注意: 除了在数据写入时进行词条转化,匹配Query时…...
2023/6/8 18:00:48 - Cloud Computing之时钟和顺序Time and Ordering
文章目录Total orderImplementation of total orderLinearizabilityFIFO rderImplementation of FIFO-orderHappen-before orderingCausal orderingSummary参考文献:Lamport’s logical clock 这章重点介绍了分布式系统下各种类型的时序,其实在分布式场景…...
2023/6/2 0:42:39 - 2023最新SSM计算机毕业设计选题大全(附源码+LW)之java星光之夜香水网站的设计与开发bfmcr
大学计算机专业毕业的,实际上到了毕业的时候,基本属于会与不会之间。说会,是因为学了整套的理论和方法,就是所谓的科班出身。说不会,是因为实践能力极差。 不会的问题,集中体现在毕设的时候,系…...
2023/6/7 1:11:41 - 删除链表的倒数第 N 个结点
题目 给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。 示例 1: 输入:head [1,2,3,4,5], n 2 输出:[1,2,3,5] 示例 2: 输入:head [1], n 1 输出:[] 示例 3&a…...
2023/6/2 19:37:26 - 最强大脑记忆曲线(9)——按错误频率排序待听写内容
目录一、增加“过程评价类”字段及“最后一次评价”字段二、修改脚本2.1 修改评卷脚本2.2 排序待听写内容写下本篇内容,完全出于“让自己的思路看得见” ,技术层倒没有什么难点。核心思想:增加几个评价过程数据字段、并给最近评价结果以较高权…...
2023/6/2 17:37:48 - 分布式锁的特点和实现
分布式锁 什么是分布式锁 满足分布式系统或集群模式下多进程可见并且互斥的锁 分布式锁具有的特点 高可用多进程可见互斥高性能安全性 分布式锁的实现 分布式锁的核心是实现多进程之间互斥,而满足这一点的方式有很多,常见的有三种: My…...
2023/5/24 11:00:48 - 搜索技术【广度优先搜索】 - 双向广度优先搜索 【HDU No. 3085】魔鬼II Nightmare Ⅱ
搜索技术【广度优先搜索】 - 双向广度优先搜索 【HDU No. 3085】魔鬼II Nightmare Ⅱ 双向搜索指分别从初始状态和目标状态出发进行搜索,在中间交会时即搜索成功。从一个方向搜索时,分支数会随着深度的增加而快速增长,产生一个大规模的搜索树…...
2023/6/1 23:36:26 - 实现注册与登录模块
目录 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 - java教师科研成果管理系统
教师权限: 教师密码管理:教师在成功登录后可以对自己的登陆密码进行修改; 教师个人信息管理:教师对自己研究相关课题信息的添加与查看操作,以及提交和查看自己的研究课题; 个人成果与奖惩管理:添加教师的个…...
2023/6/3 10:09:21 - Docker(五)—— 镜像原理、容器快照commit
一、如何得到镜像 1)从远程仓库下载 2)朋友/同事拷贝给你 3)自己制作DockerFile 二、联合文件系统 Docker的镜像是由一层层的文件系统组成,这种层级的文件系统叫做联合文件系统UnionFS。 三、Docker镜像加载原理 1. bootfs:…...
2023/6/4 21:39:00 - java毕业设计在线售药系统Mybatis+系统+数据库+调试部署
java毕业设计在线售药系统Mybatis系统数据库调试部署 java毕业设计在线售药系统Mybatis系统数据库调试部署本源码技术栈: 项目架构:B/S架构 开发语言:Java语言 开发软件:idea eclipse 前端技术:Layui、HTML、CSS、…...
2023/5/26 21:26:43 - 信奥中的数学:平面直角坐标系
平面直角坐标系确定方向和距离,你会了吗? 平面直角坐标系确定方向和距离,你会了吗?_哔哩哔哩_bilibili 秒杀名师 初中数学七年级下册 平面直角坐标系的概念 秒杀名师 初中数学七年级下册 平面直角坐标系的概念_哔哩哔哩_bilibil…...
2023/6/6 7:02:07 - 【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 - ORB-SLAM2 ---- Initializer::FindHomography函数
目录 1.函数作用 2.Initializer::FindHomography函数构造函数 3.函数解析 3.1 每次RANSAC迭代中的细节 3.2 Initializer::CheckHomography函数解析 3.2.1 函数作用 3.2.2 函数解析 1.函数作用 计算单应矩阵,假设场景为平面情况下通过前两帧求取Homography…...
2023/6/1 15:21:25 - Maven生命周期
前言: 看gradle复习知识点的时候,发现这块以前记录过的丢失了,现在重新补一下,记录复习! Maven生命周期的理解 生命周期你可以理解为:构建工程的步骤。而Maven生命周期你就可以理解为:构建项目的过程中,清理、初始化、编译、打包、测试、部署等构建步骤。笼统的讲就…...
2023/5/30 0:12:31 - 【MySQL 第十四天 数据库用户管理|日志管理|备份和恢复|数据表的导出和导入】
【MySQL 第十四天 数据库用户管理|日志管理|备份和恢复|数据表的导出和导入【1】mysql数据库的用户管理【2】mysql数据库用户的权限管理【3】mysql数据库的日志管理【4】mysql数据库的备份和恢复【5】mysql数据表的导出【6】mysql数据库的导入【1】mysql数据库的用户管理 creat…...
2023/5/24 7:54:13
最新文章
- Ae 效果详解:Mocha AE
Ae菜单:效果/Boris FX Mocha/Mocha AE Effects/Boris FX Mocha/Mocha AE Ae菜单:动画/Track in Boris FX Mocha Animation/Track in Boris FX Mocha Mocha Pro 是一款强大的平面跟踪软件。既可作为独立软件运行,也提供了 Ae 的插件版本&#…...
2023/6/9 12:17:44 - 【微信开发工具+MySQL+nodejs】实现线上账本管理系统
页面和逻辑功能开发:小程序的形式写出来,用微信开发工具,数据库用MySQL实现线上账本管理系统 需求: 下面是一个初步的设计,仅供参考: 用户管理 (1) 用户注册:用户可以在小程序中注册一个账号,需要提供用户名、密码、手机号等信息。 (2) 用户登录:用户可以使用注册时…...
2023/6/9 12:17:16 - Java开发中PO、VO、DAO、BO、DTO、POJO 含义
PO(persistant object) 持久对象 可以看成是与数据库中的表相映射的java对象。使用 Mybatis 来生成 PO 是不错的选择。 VO(value object) 值对象 通常用于业务层之间的数据传递,和 PO 一样也是仅仅包含数据而已。但应是抽象出的业务对象,可以和表对应&am…...
2023/6/9 12:17:02 - K8S | 核心原理分析
整体上理解流程和原理; 一、背景 基于分布式的架构中,需要管理的服务是非常多的,无论是服务的数量还是体系划分; 从服务的能力上看,可以进行分层管控,只是其中有相当一部分服务层,改动更新的频…...
2023/6/9 12:16:40 - 案例23:基于Java宿舍管理系统设计和实现开题报告
博主介绍:✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专…...
2023/6/9 12:16:27 - 本地安装 Stable Diffusion 教程 Mac 版本
前面两篇讲了如何用免费的网络资源搭建 Stable Diffusion,有朋友问,有没有在本地搭建的教程。 以 MacBook Pro 为例,下面是安装步骤。 前置要求:Homebrew,Python 3.0。 如未安装Homebrew,请按照https://bre…...
2023/6/9 12:15:53 - 注册中心AP、CP的区别
要了解AP、CP的区别首先需要知道AP和CP是什么? AP、CP是分布式理论中的概念: 分布式理论是关于如何设计和构建大规模计算机系统的一门学科,其目的在于探讨如何将计算机资源有效地分配到多个计算节点上,以实现更高效、可靠和可扩…...
2023/6/9 12:15:42 - chatgpt赋能python:用Python实现文本数字转换:从123到一二三
用Python实现文本数字转换:从123到一二三 在网站开发中,我们经常需要将数字转换成文字,比如将123转成“一百二十三”。这种数字转文字的需求,既方便了用户的阅读,也提高了网站的可读性和SEO效果。 在本文中ÿ…...
2023/6/9 12:15:29 - SpringMVC基于注解实现的全局异常处理
使用全局统一处理某一类异常,能够减少代码的重复度和复杂度,有利于代码的维护。 1,局部控制 ExceptionHandler 使用ExceptionHandler注解作用在方法上面,参数是具体的异常类型。一旦系统抛出这种类型的异常时,会引导…...
2023/6/9 12:14:57 - FFmpeg命令集合
1、信息查询 命令 含义 -L 显示许可证 -h topic 显示帮助 -? topic 显示帮助 help topic 显示帮助 --help topic 显示帮助 -version 显示版本 -buildconf 显示生成配置 -formats 显示有效的格式 -muxers 显示有效的复用器 -demuxers 显示有用的解复用器 …...
2023/6/9 12:14:44 - phpMyAdmin连接MySQL,出现服务器拒绝连接解决方法
当你登录mysql的时候出现下面情况时 把config.inc.php删除就可以,或者修改config.inc.php里的 $cfg[Servers][$i][controluser] ; $cfg[Servers][$i][controlpass] ; 注释掉就会弹出来要求登陆。 例如我的文件位置是在C:\wamp\apps\phpmyadmin4.1.14ÿ…...
2023/6/9 12:14:32 - Vue 中的数据请求如何进行拦截与错误处理
Vue 中的数据请求拦截与错误处理 在 Vue.js 中,我们经常需要向后端服务器发送数据请求,以获取或提交数据。在这个过程中,我们可能会遇到一些问题,例如无效的请求参数、网络连接错误、服务器错误等。为了更好地处理这些问题&#…...
2023/6/9 12:14:04 - 通过 Python 封装关键词搜索微店商品api接口
可以使用 GET 或 POST 方法,请求参数中应包含搜索关键词、每页展示数量、当前页码等信息。 解析返回的 response 中的 HTML 页面或 JSON 格式数据,提取需要的商品信息,如商品标题、价格、评价人数等。 使用 pandas 库将提取的商品信息保存到数…...
2023/6/9 12:13:50 - 【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 - docker harbor私有仓库部署
docker harbor私有仓库部署 docker system prune -a 删除停掉的服务,自定义网络等。 docker 私有仓库 docker配置文件 vim /etc/docker.daemon.josn { “insecury-registries”: ["192.168.232.10:5000],#指定私有仓库 } docker pull/push 19…...
2023/6/9 12:13:21 - $1$驱动开发
目录 1.驱动大纲: 2.单片机开发属于嵌入式开发吗? 3.RAM裸机代码和驱动有什么区别? 4.Linux系统的组成 5.宏内核、微内核 6.驱动移植 1.驱动大纲: (1)内核模块 (2)字符设备驱…...
2023/6/9 12:12:52 - 【Rust日报】2023-06-07 使用 C++ 编写通用库并在 Rust 中使用它 (WASI)
使用 C 编写通用库并在 Rust 中使用它 (WASI) WebAssembly 简介 WebAssembly 是一种二进制指令格式,旨在成为一种低级虚拟机,可以在 Web 浏览器中以接近本机的速度运行代码。它不特定于网络,也可以在其他平台上运行。WebAssembly 代码可以从各…...
2023/6/9 12:12:22 - 2023/06/05 软件项目生存期和传统生存期模型
视频参考地址: B站闫波软件项目管理视频学习. 视频资源:video P4-P6 本篇重点:项目生存期 简书日更计划同步记录🏃… 项目生命周期 软件项目生命周期 ∗ \color{red}{*} ∗ 项目生命周期的阶段 C概念/启动阶段:确立项…...
2023/6/9 12:12:04 - 100种思维模型之放大关键行动思维模型-75
很多时候,决定结果大小的是 关键行动的执行程度, 所以我们要适时 放大关键行动 ! 放大关键行动思维模型,一个 告诉我们 事前思考寻找能够破局的关键点,落实时要放大关键点上的行动 的思维模型。 01、何谓放大关键行动…...
2023/6/9 12:11:11 - mysql 批量更新json list里的key字段
mysql 批量更新json list里的字段。数组字段需要遍历数组,$[*] 好像不管用,所以写了个存储过程实现mysql 批量更新json list里的key字段 delimiter $$ drop procedure if exists updateUrlName; create procedure updateUrlName(in oldPassword varcha…...
2023/6/9 12:10:36