redis性能管理

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 599maxmemory-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.mzph.cn/news/161030.shtml

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

相关文章

触发设备离线

业务场景 业务开发过程中,我们经常会需要判断远程终端是否在线,当终端离线的时候我们需要发送消息告知相应的系统, 环形队列 1.创建一个index从0到30的环形队列(本质是个数组) 2.环上每一个slot是一个Set&#xf…

python 执行系统命令

subprocess 模块和 os.system 或 os.popen 等函数相比,功能更为强大和灵活,是 Python 官方推荐的执行系统命令的方法。主要的优势包括: 更强的错误处理:subprocess 模块可以更精细地控制错误输出和错误代码,而 os.syst…

自定义springboot的生命周期函数在项目启动完成后去取配置文件中的值

主要是实现smartLifecycle类 package com.ruoyi.workflow.util;import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.ApplicationContext; import org.springfr…

MYSQL索引使用注意事项

索引使用注意事项: 1.索引列运算 不要在索引列上进行运算操作,否则索引将失效; 2.字符串不加引号 字符串类型使用时,不加引号,否则索引将失效; 3.模糊查询 如果仅仅是尾部模糊匹配,索引将不会失…

防火墙暴露端口

如果你想开通防火墙上的端口,具体的操作方式可能会取决于你所使用的操作系统。以下是一些常见操作系统的步骤: 1. Linux(例如,Ubuntu 或 CentOS): 使用 ufw(适用于 Ubuntu): # 开…

RK平台查看板子上的dts信息

简介 dts文件描述了硬件每个模块的信息,我们嵌入式软件的调试很多时候都是在改dts文件,有时候我们不确定板子上的固件是否已经更新了我们的修改,这时候我们可以直接读取板子上的dts信息,下面来演示一下。 进入uboot命令行模式 …

关于软raid的实现及常见问题

RAID概念 磁盘阵列(Redundant Arrays of Independent Disks,RAID),有“独立磁盘构成的具有冗余能力的阵列”之意。 磁盘阵列是由很多价格较便宜的磁盘,以硬件(RAID卡)或软件(MDADM&…

关于用css设置input输入框hover的时候的样式以及当input为disabled的时候,不要让hover样式生效

效果如果&#xff1a; 编辑状态下的时候&#xff1a; 只读状态下的时候&#xff1a; 代码如图&#xff1a; <input type"text" name"dataForm.exportCode" id"exportCodeItem" required :disabled"editDisabled" />input:not(…

【前端学java】语法练习-工具类的封装(13)

往期回顾&#xff1a; 【前端学java】JAVA开发的依赖安装与环境配置 &#xff08;0&#xff09;【前端学 java】java的基础语法&#xff08;1&#xff09;【前端学java】JAVA中的packge与import&#xff08;2&#xff09;【前端学java】面向对象编程基础-类的使用 &#xff08…

java.net.UnknownHostException: eureka

java.net.UnknownHostException: eureka 哦。HOST漏了 #linux /etc/hosts #windows C:\Windows\System32\drivers\etc\hosts 127.0.0.1 eureka7000 127.0.0.1 eureka7001 127.0.0.1 eureka7002

maven打包可执行jar含依赖lib

修改pom.xml <build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><!-- jdk8可用&#xff0c;其他jdk版本可能需改插件版本 --><version>2.3.7.RE…

sql调优

慢查询 SQL 治理方案 一、SQL 性能下降的原因 在对 SQL 进行分析之前&#xff0c;需要明确可能导致 SQL 执行性能下降的原因进行分析&#xff0c;执行性能下降可以体现在很多方面&#xff1a; 查询语句写的烂索引没加好表数据过大数据库连接数不够查询的数据量过大被其他慢s…

MyBatisPlus代码生成

基础依赖 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/POM/4.0.…

visual studio 如何建立 C 语言项目

安装这个 模块。 新建 空项目 创建完成 写demo 点击运行&#xff1a;

【1day】泛微e-office OA系统user_page接口未授权访问漏洞学习

注:该文章来自作者日常学习笔记,请勿利用文章内的相关技术从事非法测试,如因此产生的一切不良后果与作者无关。 目录 一、漏洞描述 二、影响版本 三、资产测绘 四、漏洞复现

Web项目从Tomcat迁移到TongWeb

注意事项 1. 使用JNDI方式获取数据源&#xff1a; ①在TongWeb创建JDBC连接池; ②修改Web项目数据源配置. #spring.datasource.urljdbc:mysql://127.0.0.1:3306/demo #spring.datasource.usernametest #spring.datasource.passwordspring.datasource.jndi-namedemo2. 修…

Spring cloud - Hystrix源码

其实只是Hystrix初始化部分&#xff0c;我们从源码的角度分析一下EnableCircuitBreaker以及HystrixCommand注解的初始化过程。 从EnableCircuitBreaker入手 我们是通过在启动类添加EnableCircuitBreaker注解启用Hystrix的&#xff0c;所以&#xff0c;源码解析也要从这个注解…

最新PHP熊猫头图片表情斗图生成源码

这是一款能生成熊猫头表情斗图的自适应系统源码&#xff0c;无论是在电脑还是手机上都可以正常使用&#xff01;这个源码集成了搜狗搜索图片接口&#xff0c;可以轻松地一键搜索数百万张图片&#xff0c;并且还包含了表情制作等功能模块。对于一些新站来说&#xff0c;这是一个…

Cloud微服务

当我们谈论“云微服务”时&#xff0c;通常是指基于云计算和微服务架构的应用程序开发和部署模型。以下是关于云微服务的一些详细信息&#xff1a; 微服务架构&#xff1a; 微服务架构是一种软件设计和开发模式&#xff0c;将应用程序划分为一组小型、独立的服务单元。每个服…