redis 内存机制探索篇

info memory 查看redis 内存使用情况

在这里插入图片描述
出现的问题,公司在导入大量redis key 的时候,想要看一下redis 内存使用情况 ,发现used_memory_peak_perc 和 used_memory_dataset_perc 马上达到100%,这个时候很慌张,是不是当前redis 内存打满了,然后查了网上的博客,查到used_memory_dataset_perc:
在Redis中,used_memory_dataset_perc是用来表示“数据占用的内存大小的百分比”。这个指标是“数据空间占用总内存的百分比”,计算方式为“100% * (used_memory_dataset / (used_memory - used_memory_startup))”。
意思是如果这个比例如果达到了100%就会导致内存写满,这个时候非常慌张,但是又有文章说
在这里插入图片描述
意思是这个值永远也不会打满,这个时候就存在了一个疑惑,为什么说used_memory_dataset_perc 满了意味着内存使用已满,但是为什么又说是永远打不满,这是否存在矛盾,然后基于这个问题又进行探索。
在这里插入图片描述

发现操作系统的内存大小是在376G ,查看了redis 的内存分配机制,如果说redis 没有配置maxmemory 那 redis 会在达到峰值的时候像操作系统申请内存,假设操作系统内存完全提供给redis, 那理念上redis 的内存实际上是操作系统内存数,那上述问题就解决了,意思是当前内存使用量和redis 已经申请的内存的达到一定值的时候,redis 会向操作系统申请内存来应对内存使用满的情况,直到redis 的内存量和操作系统的内存量达到一致。但是情况是操作系统的内存不可能完全提供给redis使用,同时如果redis 的内存完全由操作系统内存决定的话,会非常的不稳定。
通过

free -h 

在这里插入图片描述
发现当前操作系统只能提供给117G的内存空闲内存,那意味着如果redis 内存使用情况达到操作系统内存可用峰值的时候,redis 内存就会实际上满,那这个时候redis 就会出现以下问题:
1。如果Redis实例的内存资源有限,达到峰值可能意味着无法再继续处理新的数据或请求,可能导致系统性能下降甚至崩溃。
2。如果达到峰值的内存使用量是由于数据写入造成的,那么在数据量大的情况下,可能会引发写入失败或写入延迟等问题。

因此,当used_memory_peak_perc达到100%时,通常被认为是不良情况,需要采取措施来降低内存使用量或者增加Redis实例的内存资源。这可能涉及到优化数据结构、删除部分数据、增加Redis实例的内存大小等措施。

然后导致redis 淘汰机制进行淘汰key ,性能下降崩溃,写入延迟,严重影响服务。
当redis 部署和其他进程部署在同一个机器下的时候,这种方式就非常危险,那怎么解决这个问题呢?
通过设置maxmemory,给redis 一个固定的redis 最大内存上限。
maxmemory :设置 redis 可用内存的上限。
如果 Redis 没有设置 maxmemory 参数,在 64bit 系统下那么它将使用默认值,通常为 0 或无限制。在 32bit 系统下,maxmemory 隐式不能超过 3GB。

127.0.0.1:6379> CONFIG GET maxmemory
1) "maxmemory"
2) "0"
127.0.0.1:6379> CONFIG SET maxmemory 100MB
OK
127.0.0.1:6379> CONFIG GET maxmemory
1) "maxmemory"
2) "104857600"

另一种方法是修改配置文件 redis.conf:

maxmemory 100mb

如果可用内存达到上限会发生什么?
redis 将试着根据配置的缓存策略去移除部分数据

当数据删不掉时,客户端在写数据时,服务端会响应错误信息

但是不会影响客户端读取数据

当达到maxmemory 时请设置最合适的淘汰机制去淘汰key,以降低对服务的影响。

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

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

相关文章

SQL Server :关系模式的键码与闭包计算

一、键码的定义 首先我们给出 键码的定义 如下 定义&#xff1a;已知 R<U,F> 是属性集 U 的关系模式&#xff0c;F是属性集 U 上的一组函数依赖&#xff0c;设 K 为 R<U,F> 中的属性或属性组合&#xff0c;若K ⇒ U - K 且 K 的任何真子集都不能决定 U&#xff0c…

TLS、对称/非对称加密、CA认证

1. SSL与TLS SSL/TLS是一种密码通信框架&#xff0c;他是世界上使用最广泛的密码通信方法。SSL/TLS综合运用了密码学中的对称密码&#xff0c;消息认证码&#xff0c;公钥密码&#xff0c;数字签名&#xff0c;伪随机数生成器等&#xff0c;可以说是密码学中的集大成者。 TLS…

甘草书店记: 2023年10月11日 星期三 晴 「做有光的人,照亮他人,也引人同行」

发了两篇《甘草书店记》&#xff0c;书店计划公之于众&#xff0c;收获了不少人的赞扬和鼓励&#xff0c;来自生活中的友人&#xff0c;来自麦田的客户和朋友&#xff0c;来自图书界的同行前辈&#xff0c;也来自商界的同仁。其中&#xff0c;最特别留言来自甘草书店投资方的张…

<HarmonyOS第一课>从简单的页面开始 【课后考核】

判断题 在Column容器中的子组件默认是按照从上到下的垂直方向布局的&#xff0c;其主轴的方向是垂直方向&#xff0c;在Row容器中的组件默认是按照从左到右的水平方向布局的&#xff0c;其主轴的方向是水平方向。 正确(True)List容器可以沿水平方向排列&#xff0c;也可以沿垂…

Java多线程题目总结——使用Runnable实现多线程

使用Runnable实现多线程 1. 定义一个共享资源类Resource&#xff0c;资源类里面&#xff1a; &#xff08;1&#xff09;共享资源的私有成员变量&#xff0c;指明资源类的一些属性 &#xff08;2&#xff09;定义flag变量用于线程之间的协作 private boolean flag true; &…

temu反洗钱协议在哪里签署

反洗钱是国际社会关注的重要议题之一。为了加强国际合作&#xff0c;各国政府积极参与签署反洗钱协议。TEMU反洗钱协议作为国际间的重要合作框架&#xff0c;其签署地点及其意义备受关注。本文将深入探讨TEMU反洗钱协议的签署地点及其背后的意义。 先给大家推荐一款拼多多/temu…

PostgreSQL 元组统计与 pgstattuple 优化

第1章 简介 1.1 参考文档 https://www.percona.com/blog/postgresql-tuple-level-statistics-with-pgstattuple/ 1.2 关于pgstattuble 由于Postgres表膨胀会降低数据库性能&#xff0c;因此我们可以通过消除表膨胀来提高其性能。我们可以使用pgstattuple扩展来识别膨胀的表。 这…

网络和信息系统指令 ( NIS2 ) 及其全球影响

网络和信息系统指令 ( NIS2 ) 将于 2024 年 10 月生效&#xff0c;旨在提高欧盟 (EU) 的网络弹性。 不过&#xff0c;其影响可能会更广泛&#xff0c;带来更严格的流程和控制&#xff0c;并重新定义我们向被视为国家关键的组织提供服务的方式。 该强制性指令将具有效力&#x…

锂电涂布机设备健康管理:降低运维成本的关键

随着锂电池行业的快速发展&#xff0c;锂电涂布机设备作为关键生产工艺装备&#xff0c;扮演着至关重要的角色。然而&#xff0c;涂布机设备的故障和维护成本对于企业来说是一个不可忽视的挑战。本文将介绍做好锂电涂布机设备的健康管理&#xff0c;降低运维成本的关键措施。 锂…

初刷leetcode题目(11)——数据结构与算法

&#x1f636;‍&#x1f32b;️&#x1f636;‍&#x1f32b;️&#x1f636;‍&#x1f32b;️&#x1f636;‍&#x1f32b;️Take your time ! &#x1f636;‍&#x1f32b;️&#x1f636;‍&#x1f32b;️&#x1f636;‍&#x1f32b;️&#x1f636;‍&#x1f32b;️…

Python的ConfigParser模块来读取/修改INI格式的配置文件

可以使用Python的ConfigParser模块来读取INI格式的配置文件&#xff0c;具体步骤如下&#xff1a; 导入ConfigParser模块 import configparser2. 创建ConfigParser对象 config configparser.ConfigParser()3. 读取config.ini文件内容 config.read(config.ini)4.获取配置项…

Elasticsearch初识--CentOS7安装ES及Kibana

文章目录 一&#xff0e;前言二&#xff0e;介绍1.Elasticsearch2.Kibana 三&#xff0e;ES安装1.下载安装包2.解压、配置2.1 解压2.2 配置 3.启动3.1增加用户3.2启动 4.解决资源分配太少问题5.启动成功 四&#xff0e;Kibana安装1.下载安装包2.解压、配置2.1 解压2.2 配置2.2 …

太快了!文生图片只需1秒,开源SDXL Turbo来啦!

11月29日&#xff0c;著名开源生成式AI平台Stability.ai在官网发布了&#xff0c;开源文生图模型SDXL Turbo。 根据使用体验&#xff0c;SDXL Turbo的生成图像效率非常快&#xff0c;可以做到实时响应&#xff08;可能小于1秒&#xff09;。 在你输入完最后一个文本后&#x…

【优选算法系列】【专题十四优先级队列】第一节.(1046. 最后一块石头的重量和703. 数据流中的第 K 大元素)

文章目录 前言一、最后一块石头的重量 1.1 题目描述 1.2 题目解析 1.2.1 算法原理 1.2.2 代码编写 1.2.3 题目总结二、数据流中的第 K 大元素 2.1 题目描述 2.2 题目解析 2.2.1 算法原理 2.2…

java第20章节

一.线程简介 二.创建线程 1.继承Thread类 Thread类中常用的两个构造方法如下&#xff1a; public Thread():创建一个新的线程对象。 public Thread(String threadName):创建一个名称为threadName的线程对象。 继承Thread类创建一个新的线程的语法如下&#xff1a; public c…

C++:char* array = “Hello World“报错怎么办

目录 一、原因二、解决办法一三、解决办法二四、解决办法三 一、原因 在C隐式类型转换中提到这个知识点&#xff1a; 转换成常量&#xff1a;允许将指向非常量类型的指针转换成指向相应的常量类型的指针。…相反的转换并不存在&#xff0c;因为它试图删除掉底层const。 这就…

AI视频智能分析识别技术的发展与EasyCVR智慧安防视频监控方案

随着科技的不断进步&#xff0c;基于AI神经网络的视频智能分析技术已经成为了当今社会的一个重要组成部分。这项技术通过利用计算机视觉和深度学习等技术&#xff0c;实现对视频数据的智能分析和处理&#xff0c;从而为各个领域提供了广泛的应用。今天我们就来介绍下视频智能分…

建立健全涉密测绘外业安全保密管理制度,落实监管人员和保密责任,外业所用涉密计算机纳入涉密单机进行管理

建立健全涉密测绘外业安全保密管理制度&#xff0c;落实监管人员和保密责任&#xff0c;外业所用涉密计算机纳入涉密单机进行管理 1.涉密测绘外业安全保密管理制度 2.外业人员及设备清单&#xff08;包括&#xff1a;外业从业人员名单、工作岗位&#xff0c;外业设备名称、密…

Opencv | 直方图均衡化

import cv2 #opencv 读取的格式是BGR import numpy as np import matplotlib.pyplot as plt #Matplotlib是RGB %matplotlib inline def cv_show(img,name):cv2.imshow(name,img)cv2.waitKey()cv2.destroyAllWindows() cv2.calcHist(images,channels,mask,histSize,ranges) - …

验证码及其实现

1. 什么是验证码 验证码&#xff08;Completely Automated Public Turing test to tell Computers and Humans Apart&#xff0c;CAPTCHA&#xff09;是一种测试&#xff0c;用于确定用户是否为真实人类。它通常以需要用户解决的小挑战的形式出现&#xff0c;例如识别扭曲的文…