redis性能管理

news2025/1/11 8:16:28

redis的数据库是存放在内存当中,所以对内存的监控至关重要

redis内存监控和解析

1.如何查看redis内存使用情况

[root@localhost utils]# redis-cli -h 20.0.0.170 -p 6379 
20.0.0.170:6379> info memory
used_memory:853336        //redis中数据占用的内存
used_memory_rss:10473472  //redis向操作系统申请的内存
used_memory_peak:854312   //redis使用内存的峰值

作为一个运维工程师,每天的系统巡检工作是必不可少的。(比如硬件巡检,数据库 nginx redis docker k8s )

但是在redis内存方面,最重要的就是以上三点

2.内存碎片率

内存碎片率=Redis向操作系统申请的内存 / Redis中的数据占用的内存

mem_fragmentation_ratio = used_memory_rss / used_memory

mem_fragmentation_ratio:内存碎片率。

系统以及分配给了redis,但是redis未能够有效利用的内存

[root@localhost ~]# redis-cli info memory | grep ratio
allocator_frag_ratio:1.29  
//分配器碎片比例,redis主进程调度时产生的内存空间,越小越好
值越高,代表内存越高,内存的浪费就越多

allocator_rss_ratio:5.99
分配器占用物理内存的比例,就算告诉大家主进程调度执行时占用了多少物理内存

rss_overhead_ratio:1.22
rss是向系统申请的内存空间,表示redis占用物理内存额外的开销比例,比例越低越好。redis实际占用的物理内存和向系统申请的内存越接近,额外的开销越低

mem_fragmentation_ratio:13.23
内存碎片的比例,越低越好,占用内存数值越低,表示内存使用率越高。

内存碎片产生的原因

  • Redis内部有自已的内存管理器,为了提高内存使用的效率,来对内存的申请和释放进行管理。
  • Redis中的值删除的时候,并没有把内存直接释放、交还给操作系统,而是交给了Redis内部有内存管理器。
  • Redis中申请内存的时候,也是先看自己的内存管理器中是否有足够的内存可用。
  • Redis的这种机制,提高了内存的使用率,但是会使Redis中有部分自己没在用,却不释放的内存,导致了内存碎片的发生。
     

如何自动清理碎片

vim /etc/redis/6379.conf
最后一行插入
activedefrag yes

手动清理

[root@localhost ~]# redis-cli memory purge
OK
手动清理

内存使用率

redis实例的内存使用率超过可用最大内存,操作系统将开始进行内存与swap空间交换。

避免内存交换发生的方法:

  • 针对缓存数据大小选择安装Redis 实例
  • 尽可能的使用Hash数据结构存储
  • 设置key的过期时间

设置redis最大内存阀值

一旦到达阀值,自动清理碎片,开启key的回收机制。

key的回收机制策略

vim /etc/redis/6379.conf
line 599

maxmemory-policy volatile-lru
使用redis内置的LRU算法,把已经设置了过期时间的键值对中淘汰数据,移除最近最少使用键值对(针值对已经设置了过期时间的键值对)

maxmemory-policy volatile-ttl
已经设置了过期时间的键值对,从当中挑选一个即将过期的键值对(针对有设置过期时间的键值对)

maxmemory-policy volatile-random:
从已经设置了过期时间的键值对当中随即淘汰一个键值对,挑选数据随机淘汰键值对。(对设置了过期时间的键值对进行随机移除。)

allkeys-lru:
LRU算法当中,对所有的键值对进行淘汰,移除最少使用的键值对。(针对所有键值对)

allkeys-random:
从所有键值对当中任意选择选择数据进行淘汰(无差别淘汰,不使用)

maxmemory-policy noeviction
禁止键值对回收(不删除任何键值对,直到redis把内存塞满,写不了,报错)

在工作中,一定要给redis 占用内存设置阀值 !!!!

而且在实际工作中,尽量使用禁止键值对回收,或者使用将最少使用键值对删除。

随机删除万万不可使用!!!!!

redis占用内存的效率问题如何解决

  • 1.日常巡检当中,对redis的占用情况做监控
  • 2.设置redis占用系统内存的阀值,避免占用系统全部内存
  • 3.内存碎片清理 手动,自动
  • 4.配置一个合适的key回收机制

redis的雪崩,缓存击穿,缓存穿透的原因和解决方案

redis的雪崩

大量的应用请求无法在redis 缓存当中处理,请求会全部发送到吗后台数据库,数据库本身并发能力本身就很差,一旦高并发数据库会很快崩溃。

什么情况会导致雪崩?

  • redis集群大面积故障
  • redis缓存中,大量数据同时过期,大量请求无法得到处理
  • redis实例宕机

解决方案

  • 事前:高可用架构,方式整个缓存故障。主从复制和哨兵模式,redis集群
  • 事中:在国内用的比较多的方式:HySTRIX,熔断(到达阀值自动断开),降级(到达阀值立刻降级),限流三个手段来降低雪崩发生之后的损失。
  • 数据库不死即可,慢可以,但不能没有响应
  • 事后:数据备份

redis的缓存击穿

缓存击穿主要是热点数据缓存过期,或者被删除,多个请求并发访问热点数据,请求也是转发到数据库了,导致数据库的性能快速下降。

经常被请求的缓存数据,最好设置为永不过期。

键值对还在,但是值被替换,原有的请求找不到之后,同样也回去请求后台数据库,也是击穿的类型一种

redis的缓存穿透:

缓存中没数据,数据库中也没有对应数据,但是有用户一直在发起这个都没有的请求,而且请求的数据格式很大。黑客在利用漏洞攻击,压垮应用数据库。

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

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

相关文章

Can‘t open the append-only file: Permission denied

redis rdb aof-CSDN博客 Cant open the append-only file: Permission denied E:\Document_Redis_Windows\redis-2.4.5-win32-win64\64bit E:\Document_Redis_Windows\redis-2.4.5-win32-win64\64bit\redis.conf 还是不行,就要修改权限了,windows【完全控…

Apache访问控制

服务器相关的访问控制 Options指令 Options指令是Apache服务器配置文件中的一个重要指令,它可以用于控制特定目录启用哪些服务器特性。Options指令可以在Apache服务器的核心配置、虚拟主机配置、特定目录配置以及.htaccess文件中使用。 以下是一些常用的服务器特性选项: N…

springboot前后端分离项目配置https接口(ssl证书)

文章目录 说明vue.js前端部署vue.js项目axios请求配置本地创建日志文件创建Dockerfile文件配置ssl证书nginx.confvue项目打包上传创建容器部署 后端springboot项目部署配置ssl证书打包部署 补充:jsk证书和pfx证书补充:两种证书的转化JKS转PFXPFX 转 JKS …

DLL文件的使用

DLL文件就是动态库文件,搞个例子就懂了,搞两个工程,一个工程生成DLL,一个工程调用DLL。 生成DLL工程 打开Visual Studio 2019,版本高了可能不行,创建新项目。 搜索DLL,动态链接库。 给项目起个…

万界星空科技SMT行业生产管理MES系统解决方案

一、SMT行业特点: SMT(Surface Mounted Technology)作为电子组装行业里首先的技术和工艺,选择合适的MES解决方案来保障SMT生产的成功至关重要。 电子行业涉及的范围非常广,包含了汽车、电脑、电视、手机等产品上&…

如何编辑WordPress配置文件wp-config.php

目录 wp-config.php文件全部内容: 修改wp-config.ph文件中的数据库设置: 设置wp-config.ph文件中的密钥部分 修改数据库表前缀 设置绝对路径 WordPress会把数据库的相关信息存在wp-config.php文件中。如果编辑有问题,则会出现建立数据库连…

Java—学生信息管理系统(简单、详细)

文章目录 一、主界面展示二、学生类三、系统功能方法3.1 main()方法3.2 添加学生信息3.3 删除学生信息3.4 修改学生信息3.5 查看所有学生信息 四、完整代码4.1 Student .Java4.2 StudentManger.Java 前言:本案例在实现时使用了Java语言中的ArrayList集合来储存数据。…

八、ffmpeg录制视频为yuv文件

前言 测试环境: ffmpeg的4.3.2自行编译版本windows环境qt5.12 图片的一些重要知识: RGB图片 位深度:每一个像素都会使用n个二进制位来存储颜色信息。每一个像素的颜色都是由红(Red)、绿(Green&#xff0…

中职组网络安全 Server-Hun-1.img Server-Hun-2.img

一串密码 smbuser用户和密码登录ssh还是失败提示需要密钥,尝试ftp登录成功 发现密钥存放在.ssh/下,在kali上生成一个密钥,通过上传到.ssh/下,将其替换掉 使用kali生成密钥 登录成功,但是无法拿到root目录下的flag 获取root用户权限…

分类预测 | Matlab实现基于PSO-PNN粒子群算法优化概率神经网络的数据分类预测

分类预测 | Matlab实现基于PSO-PNN粒子群算法优化概率神经网络的数据分类预测 目录 分类预测 | Matlab实现基于PSO-PNN粒子群算法优化概率神经网络的数据分类预测分类效果基本描述程序设计参考资料 分类效果 基本描述 1.Matlab实现基于PSO-PNN粒子群算法优化概率神经网络的数据…

Scala如何写一个通用的游戏数据爬虫程序

以前想要获取一些网站数据的时候,都是通过人工手动复制粘贴,这样的效率及其低下。数据少无所谓,如果需要采集大量数据,手动就显得乏力了。半夜睡不着,爬起来写一段有关游戏商品数据的爬虫通用模板,希望能帮…

大数据预处理技术

文章目录 前言 大数据技术成为前沿专业 也是现在甚至未来的朝阳产业,大数据有分别是 数据预处理 数据存储 大数据处理和分析 数据可视化 部分组成 ,大数据行业有数据则称王,大数据的核心是数据本身 怎么获取有价值的数据呢?本章讲…

【iOS】知乎日报

文章目录 前言一、首页1.网络的异步请求2.避免同一网络请求执行多次3.下拉刷新与上拉加载的实现下拉刷新上拉加载 二、网页1.webView的实现2.webView的滑动加载3.网页与首页内容的同步更新 三、评论区Masonory实现行高自适应 四、收藏中心通过FMDB实现数据持久化1.创建或打开数…

笔记本外接显示器的一些基本操作

1>,安装问题直接问客服,正常情况是将显示屏接上电源,然后用先将显示屏和笔记本的HDMI接口连接即可。 按下组合键 win p ,选择 “复制”。 2>,接上显示屏后,原笔记本无声音? 1、找到笔记本电脑右下…

【Rxjava详解】(二) 操作符的妙用

文章目录 接口变化操作符mapflatmapdebouncethrottleFirst()takeconcat RxJava 是一个基于 观察者模式的异步编程库,它提供了丰富的操作符来处理和转换数据流。 操作符是 RxJava 的核心组成部分,它们提供了一种灵活、可组合的方式来处理数据流&#xf…

5-1 Java 网络编程

第1关:URL类与InetAddress类 任务描述 本关任务:了解网络编程基础知识。 相关知识 为了完成本关任务,你需要掌握:1.URL;2.InetAddress。 URL 统一资源定位符(Uniform Resource Locator,缩…

新的centos7.9安装jenkins—(一)

更多ruoyi-nbcio功能请看演示系统 gitee源代码地址 前后端代码: https://gitee.com/nbacheng/ruoyi-nbcio 演示地址:RuoYi-Nbcio后台管理系统 因为是用java8,所以还是要最后java8版本的jenkins,版本号是2.346.3,后…

HTTP四大参数类型及请求参数的方式和如何接收

HTTP 请求中4大参数类型和接收方法。 1、请求头参数head 请求头参数顾名思义,是存放在请求头中发送给服务器的参数,服务器通过解析请求头获取参数内容。通常会存放本次请求的基本设置,以帮助服务器理解并解析本次请求的body体。 参数形式如…

大模型变身双面人:虚假新闻制造机VS假新闻鉴别大师!

大家是怎样看待大型语言模型生成信息的可靠性呢? 尽管大语言模型生成的内容“像模像样”,但这些模型偶尔的失误揭示了一个关键问题:它们生成的内容并不总是真实可靠的。 那么,这种“不保真”特性能否被用来制造虚假信息呢&#x…

使用Python画一棵树

🎊专栏【不单调的代码】 🍔喜欢的诗句:更喜岷山千里雪 三军过后尽开颜。 🎆音乐分享【如愿】 🥰欢迎并且感谢大家指出我的问题 文章目录 🌹Turtle模块🎄效果🌺代码🛸代码…