百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术教程 > 正文

Redis | 内存回收策略(redis内存管理机制)

mhr18 2024-10-24 11:10 20 浏览 0 评论

Redis 可以认为是一个内存数据库,我们可以向 Redis 插入多种格式的数据,这些数据同时也会占用相应的内存空间,如果只增不减,内存尽早会用完,新的数据将无法正常写入。

如何回收内存空间?

如果数据还在使用中,肯定是不能随便回收的,这样会造成数据不稳定。

DEL

通过 del 命令删除数据,硬删除,没什么好说的,乖乖释放内存就好了。

回收过期数据

Redis 可以通过 expire 命令为键设置过期时间,超过了设定的过期时间,则数据自动失效,但失效的数据并没有被删除,也就是说数据虽然失效,客户端无法获取到,但内存空间并没有马上释放。

Redis 提供了主动和被动两种方式来回收这部分内存。

  • 被动,当客户端尝试读取一个已经过期的 key 时,会触发 Redis 删除该 key
  • 主动,但有的过期 key 可能永远都不会被访问,所以,仅仅靠被动方式是不够的,Redis 会周期轮询判定 key 是否过期,过期的 key 会被删除。

但如果每次都轮询所有 key 的话,一个一个去判定是否过期,那么这也将是一个很耗时的操作,可能影响到 Redis 本身的响应速度,所以 Redis 采用了一种平凡的概率算法:

Redis 会每秒执行 10 次测试,随机 20key 进行过期检测,删除所有已经过期的 key,如果有多于 25%key 过期,重复执行,直到过期的 key 比例低于 25%

通过这个算法,Redis 每次清理顶多清理掉 25% 的过期数据,但可以更好地保障 Redis 的高性能,其实是一种以空间换时间的操作。

Slave 如何处理过期数据

上面讲的都是 Master 如何处理过期数据,Slave 在处理过期数据时跟 Master 不太一样。

当一个 key 过期,Master 会给 Slave 合成一个 DEL 同步命令,Slave 不会独立过期 key,而是等待 MasterDEL 命令。

内存已满

当向 Redis 写入数据时,检测到内存已满,无法正常写入,此时 Redis 也有可能会进行一次内存回收,这处决于 Redis 设置的 maxmemory-policy 策略。

maxmemory-policy 有以下六种策略可选

  • noeviction:返回错误
  • allkeys-lru:尝试回收最少使用的数据(LRU)
  • volatile-lru:尝试回收最少使用的数据(LRU),但只限于设置了过期时间的数据
  • allkeys-random:尝试随机回收部分数据
  • volatile-random:尝试随机回收部分数据,但只限于设置了过期时间的数据
  • volatile-ttl:尝试回收设置了过期时间的数据,优先回收存活时间(TTL)较短的数据。

只要不是设置的 noeviction,都会触发一次内存回收。

具体可以参考 Redis知识点 - 当内存不足时,redis如何响应?

最后关注一下,共同学习


相关推荐

使用 Docker 部署 Java 项目(通俗易懂)

前言:搜索镜像的网站(推荐):DockerDocs1、下载与配置Docker1.1docker下载(这里使用的是Ubuntu,Centos命令可能有不同)以下命令,默认不是root用户操作,...

Spring Boot 3.3.5 + CRaC:从冷启动到秒级响应的架构实践与踩坑实录

去年,我们团队负责的电商订单系统因扩容需求需在10分钟内启动200个Pod实例。当运维组按下扩容按钮时,传统SpringBoot应用的冷启动耗时(平均8.7秒)直接导致流量洪峰期出现30%的请求超时...

《github精选系列》——SpringBoot 全家桶

1简单总结1SpringBoot全家桶简介2项目简介3子项目列表4环境5运行6后续计划7问题反馈gitee地址:https://gitee.com/yidao620/springbo...

Nacos简介—1.Nacos使用简介

大纲1.Nacos的在服务注册中心+配置中心中的应用2.Nacos2.x最新版本下载与目录结构3.Nacos2.x的数据库存储与日志存储4.Nacos2.x服务端的startup.sh启动脚...

spring-ai ollama小试牛刀

序本文主要展示下spring-aiollama的使用示例pom.xml<dependency><groupId>org.springframework.ai<...

SpringCloud系列——10Spring Cloud Gateway网关

学习目标Gateway是什么?它有什么作用?Gateway中的断言使用Gateway中的过滤器使用Gateway中的路由使用第1章网关1.1网关的概念简单来说,网关就是一个网络连接到另外一个网络的...

Spring Boot 自动装配原理剖析

前言在这瞬息万变的技术领域,比了解技术的使用方法更重要的是了解其原理及应用背景。以往我们使用SpringMVC来构建一个项目需要很多基础操作:添加很多jar,配置web.xml,配置Spr...

疯了!Spring 再官宣惊天大漏洞

Spring官宣高危漏洞大家好,我是栈长。前几天爆出来的Spring漏洞,刚修复完又来?今天愚人节来了,这是和大家开玩笑吗?不是的,我也是猝不及防!这个玩笑也开的太大了!!你之前看到的这个漏洞已...

「架构师必备」基于SpringCloud的SaaS型微服务脚手架

简介基于SpringCloud(Hoxton.SR1)+SpringBoot(2.2.4.RELEASE)的SaaS型微服务脚手架,具备用户管理、资源权限管理、网关统一鉴权、Xss防跨站攻击、...

SpringCloud分布式框架&amp;分布式事务&amp;分布式锁

总结本文承接上一篇SpringCloud分布式框架实践之后,进一步实践分布式事务与分布式锁,其中分布式事务主要是基于Seata的AT模式进行强一致性,基于RocketMQ事务消息进行最终一致性,分布式...

SpringBoot全家桶:23篇博客加23个可运行项目让你对它了如指掌

SpringBoot现在已经成为Java开发领域的一颗璀璨明珠,它本身是包容万象的,可以跟各种技术集成。本项目对目前Web开发中常用的各个技术,通过和SpringBoot的集成,并且对各种技术通...

开发好物推荐12之分布式锁redisson-sb

前言springboot开发现在基本都是分布式环境,分布式环境下分布式锁的使用必不可少,主流分布式锁主要包括数据库锁,redis锁,还有zookepper实现的分布式锁,其中最实用的还是Redis分...

拥抱Kubernetes,再见了Spring Cloud

相信很多开发者在熟悉微服务工作后,才发现:以为用SpringCloud已经成功打造了微服务架构帝国,殊不知引入了k8s后,却和CloudNative的生态发展脱轨。从2013年的...

Zabbix/J监控框架和Spring框架的整合方法

Zabbix/J是一个Java版本的系统监控框架,它可以完美地兼容于Zabbix监控系统,使得开发、运维等技术人员能够对整个业务系统的基础设施、应用软件/中间件和业务逻辑进行全方位的分层监控。Spri...

SpringBoot+JWT+Shiro+Mybatis实现Restful快速开发后端脚手架

作者:lywJee来源:cnblogs.com/lywJ/p/11252064.html一、背景前后端分离已经成为互联网项目开发标准,它会为以后的大型分布式架构打下基础。SpringBoot使编码配置...

取消回复欢迎 发表评论: