Redis-内存管理

      Redis是基于内存存储的,非关系型,键值对数据库。因此,对Redis来说,内存空间的管理至关重要。那Redis是如何内存管理的呢?

一、最大内存限制

     Redis 提供了 maxmemory 参数允许用户设置 Redis 可以使用的最大内存大小。当 Redis 使用的内存量达到 maxmemory 设置的上限时,Redis 会根据配置的淘汰策略(如 LRU、LFU、TTL 等)自动删除某些键值对以释放内存。

二、过期键删除策略

     用户可以为键设置过期时间,当键过期后,Redis 采用多种方式处理:
     1、定期删除:Redis 会周期性地随机检查并删除一部分已过期的键。
     2、惰性删除:在访问某个键时,如果发现该键已过期,则立即删除它。
     3、主动淘汰:结合上述两种方法,在内存不足时按照特定策略主动淘汰未过期的键。

三、内存分配与回收

     Redis 使用jemalloc或libc等高效的内存分配器进行内部数据结构(如字符串、哈希表、链表、集合等)的内存分配与回收,减少内存碎片

四、结合数据结构和编码方式做内存优化

     Redis 的内部数据结构经过特殊设计,能够紧凑存储不同类型的数据,例如简单动态字符串SDS、压缩列表ziplist等。
     Redis 还支持多种编码方式,针对不同场景下的数据量和访问模式选择最节省空间的编码方式,如哈希表的ziplist编码和hashtable编码切换。


五、内存淘汰策略

     当达到内存上限且有新数据需要插入时,Redis 会按照预设的淘汰策略从数据集中选择合适的键删除,常见的淘汰策略包括:
      noeviction:不删除任何数据,返回错误给客户端(当内存达到 maxmemory 时不再执行写操作)。
     volatile-lru/volatile-ttl/allkeys-lru/allkeys-random/allkeys-lfu:基于 LRU(最近最少使用)、TTL(过期时间)、LFU(最不经常使用)或随机选择键进行删除。

     在java中,我们了解过jvm的垃圾回收机制对未被引用的对象进行回收的过程。那在Redis中,是如何被回收呢?

答:在 Redis 中,内存管理采用了引用计数(Reference Counting)的方式来跟踪对象的生命周期。这意味着每个 Redis 对象都有一个引用计数器,当有新的引用指向该对象时,引用计数加1;当引用移除时,引用计数减1。

      当一个 Redis 对象的引用计数变为0时,表示没有任何其他对象引用它,此时 Redis 会立即释放这个对象所占用的内存空间。因此,Redis 的内存回收是实时且确定性的,不需要像Java那样等待垃圾收集器不定时地进行扫描和清理无用对象的过程。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/261432.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

YOLOv8改进 | 进阶实战篇 | 利用辅助超推理算法SAHI推理让小目标无所谓遁形(支持视频和图片)

欢迎大家订阅我的专栏一起学习YOLO! 一、本文介绍 本文给大家带来的是进阶实战篇,利用辅助超推理算法SAHI进行推理,同时官方提供的版本中支持视频,我将其进行改造后不仅支持视频同时支持图片的推理方式,SAHI主要的推理场景是针对于小目标检测(检测物体较大的不适用,…

DockerFile的应用

DockerFile的应用 一、介绍1 构建的三步骤2 构建的过程 二、常用命令三、DockerFile案例1 创建DockerFile文件2 使用DockerFile文件构建镜像3 启动容器并验证 四 DockerFile添加数据卷 一、介绍 DockerFile是用来构建Docker镜像的构建文件,是由一系列命令和参数构成…

鸿蒙会成为安卓的终结者吗?

随着近期鸿蒙OS系统推送测试版的时间确定,关于鸿蒙系统的讨论再次升温。 作为华为自主研发的操作系统,鸿蒙给人的第一印象是具有颠覆性。 早在几年前,业内就开始流传鸿蒙可能会代替Android的传言。毕竟,Android作为开源系统&…

利用Python实现科学式占卜

一直以来,中式占卜都是基于算命先生手工实现,程序繁琐(往往需要沐浴、计算天时、静心等等流程)。准备工作复杂(通常需要铜钱等道具),计算方法复杂,需要纯手工计算二进制并转换为最终…

Android13 编译ninja failed with: exit status 137

描述 现象很奇怪,主机是ubuntu 18.04, 内存有32G,并且系统中有两份Android13代码, 有一份编译正常,另外一份编译不正常,一度以为是因为下载源码不齐全导致,后面仔细看日志,原来是内…

深入理解指针(c语言)

目录 一、使用指针访问数组二、数组名的理解1、数组首元素的地址2、整个数组 三、一维数组传参的本质四、冒泡排序五、二级指针六、指针数组 一、使用指针访问数组 可以使用指针来访问数组元素。例如,可以声明一个指针变量并将其指向数组的第一个元素,然…

c语言经典测试题2

1.题1 我们来思考一下它的结果是什么? 我们来分析一下:\\是转义为字符\,\123表示的是一个八进制,算一个字符,\t算一个字符,加上\0,应该有13个,但是strlen只计算\0前的字符个数。所以…

Vue3引用第三方模块报错Could not find a declaration file for module ***.

在引用第三方的组件时候报错如下 原因是:该组件可能不是.ts文件而是.js文件 解决方案: 1.在Src的目录下面新建一个文件为shims-vue.d.ts的文件 2.文件内容为 declare module xxx,xxx就是你报错的模块 例如我这样 declare module vue3-pu…

Gitlab 设置页面语言为简体中文

1.用户登录,点击头像,再点击Preferences(偏好设置) 2.向下滑动,找到 Localization(本地化),进行修改,并保存 3.刷新页面,就更改成简体中文了

药厂常用实验室耗材PFA药勺耐腐蚀透明长柄取样勺

实验室取用药品或少量样品时,常用到药匙,PFA药匙分固体药匙和液体药匙两种,别名也叫量勺、药勺、搅拌勺、样品勺、取样勺等。 PFA取样勺,常用于高要求实验条件下取用少量粉末微量颗粒等。可根据您的需要定制各种尺寸、规格的四氟…

【深度学习笔记】回归与分类

回归与分类 1 Logistic 回归 定义 目标:给定数据点 X ( n ) ∈ R m X^{(n)}∈R^m X(n)∈Rm 和相应标签 t ( n ) ∈ Ω t^{(n)}∈Ω t(n)∈Ω ,找到一个映射 f : R m → Ω f:R^m→Ω f:Rm→Ω 回归的目的是预测一个连续的数值变量,如果Ω…

jenkins的nmp install命令无法下载包

问题:在jenkin的流水线脚本中执行到:npm install命令后无法下载前端依赖包 1、进到jenkins的工作目录,一般在底层为/var/lib/jenkins/workspace/任务名称 cd /var/lib/jenkins/workspace/xkc处理方式: # 查看镜像源 npm config …

Redis篇----第十二篇

系列文章目录 文章目录 系列文章目录前言一、一个 Redis 实例最多能存放多少的 keys?List、Set、Sorted Set 他们最多能存放多少元素二、MySQL 里有 2000w 数据,redis 中只存 20w 的数据,如何保证 redis 中的数据都是热点数据?三、Redis 最适合的场景?前言 前些天发现了一…

游戏配置二级缓存一致性问题解决方案

游戏服务器进程在启动的时候,一般会把所有策划配置数据加载到内存里,将主键以及对应的记录存放在一个HashMap容器里,这称为一级缓存。部分功能可能还需要缓存其他数据,这些称为二级缓存。举个例子,对于如下的玩家升级表…

如何删除PS最近使用项

ps删除最近文件列表 点击菜单栏中文件->最近打开文件->清除最近的文件列表

【OpenSSH+Jenkins搭建项目自动化部署】

OpenSSHJenkins搭建项目自动化部署 一、Windows安装OpenSSH1.下载2.解压3.安装4.启停服务5.SSH免密登录 二、Jenkins安装1.下载2.安装启动3.登录 三、项目自动化部署1.SSH配置2.项目配置3.权限控制 一、Windows安装OpenSSH 1.下载 https://github.com/PowerShell/Win32-0penS…

如何修改docker容器的端口映射

要修改 Docker 容器的端口映射&#xff0c;你需要停止并删除现有的容器&#xff0c;然后使用新的端口映射重新运行容器。以下是详细步骤&#xff1a; 停止容器&#xff1a; 使用 docker stop 命令停止正在运行的容器。替换 <container_id> 为你要停止的容器的 ID 或者容器…

SVN忽略已提交的文件(ignore,移出版本控制)

本文适用于已安装TortoiseSVN客户端的同学。 1、右键点击要忽略的文件夹或文件&#xff0c;鼠标移到“TortoiseSVN”&#xff0c;找到“Unversion and add to ignore list”&#xff0c;选择文件夹&#xff0c;弹出提示框确认忽略。 2、设置完忽略文件后&#xff0c;还需要做…

微信小程序uniapp校园在线报修系统维修系统java+python+nodejs+php

管理员的主要功能有&#xff1a; 1.管理员输入账户登陆后台 2.个人中心&#xff1a;管理员修改密码和账户信息 3.用户管理&#xff1a;对注册的用户信息进行删除&#xff0c;查询&#xff0c;添加&#xff0c;修改 4.维修工管理&#xff1a;对维修工信息进行添加&#xff0c;修…

合金电阻器与新兴技术的融合:引领电子行业的下一波浪潮?

随着电子行业以前所未有的速度向创新迈进&#xff0c;合金电阻器与尖端技术的集成证明了电子元件的动态特性。本文探讨了合金电阻器与新兴技术的融合&#xff0c;开创了功能化、小型化和效率化的新时代。 1. 与IoT&#xff08;物联网&#xff09;集成&#xff1a; 合金电阻器在…