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.rhkb.cn/news/205871.html

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

相关文章

手敲myarraylist,深入了解其运行逻辑

1、自定义MyArrayList类 该类里面基本有两个属性,一个是用来存放数据的数组,另外一个是用来描述已经存放数据的数量。同时设置arraylist表的默认长度为10;代码如下: public class MyArrayList {private int[] elem;private int u…

自学成为android framework工程师需要准备哪些装备-千里马车载车机系统开发学习

背景 hi,粉丝朋友们: 大家好!经常有很多学员买课同学都会问到需要准备哪些装备,我也回答了很多学员了,今天就搞一篇文章来统一说明一下,告诉一下大家如果你想从一个framework新手变成一个framework开发的高…

Element-Plus 图标自动导入

🚀 作者主页: 有来技术 🔥 开源项目: youlai-mall 🍃 vue3-element-admin 🍃 youlai-boot 🌺 仓库主页: Gitee 💫 Github 💫 GitCode 💖 欢迎点赞…

机器学习——决策树

1.决策树 2.熵(不确定程度) 3.信息增益 & 信息增益比 3.1 信息增益 & 信息增益比 的 概念 3.2 案例解释说明 3.2.1数据集说明 3.2.2计算 4.&#x…

为工业企业介绍新版 PT ISIM

🏭 我们发布了新版 PT Industrial Security Incident Manager - 4.4,这是一款深度流程流量分析系统。 以下是主要变化的简要概述 🖥 新增 microView Sensor 它安装在紧凑型工业 PC 上,设计用于小型自动化设施:6-10 …

Java实现简单的王者荣耀游戏

一、创建新项目 首先创建一个新的项目,并命名为wangzherongyao。 其次在飞翔的鸟项目下创建一个名为img的文件夹用来存放游戏相关图片。详细如下图: 二、游戏代码 1、创建怪物类 1.bear: package beast;import wangzherogyao.GameFrame;…

Linux 基本语句_13_消息队列

概念: 不同进程能通过消息队列来进行通信,不同进程也能获取或发送特定类型的消息,即选择性的收发消息。 一般一个程序采取子进程发消息,父进程收消息的模式 常用函数功能: fork(); // 创建子进程 struct msgbuf{ …

运维知识点-openResty

openResty 企业级实战——畅购商城SpringCloud-网站首页高可用解决方案-openRestynginxlua——实现广告缓存测试企业级实战——畅购商城SpringCloud-网站首页高可用解决方案-openRestynginxlua——OpenResty 企业级实战——畅购商城SpringCloud-网站首页高可用解决方案-openRes…

2023-简单点-树莓派-camera module 3介绍

Raspberry Pi Camera Module 3 介绍开头先说,注意事项libcamera感光芯片和驱动的兼容图额外:不同module的对应的参数图用bullseye系统测试摄像头预览窗口拍摄静态图片bayer raw图像获取超长曝光视频流raw视频流 ref 介绍 树莓派镜像在Bullseye版本之后&…

linux 讨论题合集(个人复习)

常规文件的权限是什么?如何分配或修改这些权限?文件夹(目录)的权限是什么?显示常规文件和文件夹的区别 讨论:①常规的文件权限有四种,r可读、w可写、x可执行、-没有权限;②可以使用c…

如何使用录屏软件在电脑录制PDF文件

我有一个PDF文件,想用录屏软件将它录制下来并添加上详细的注释,然后发给客户看,请问应该如何录制呢?有没有推荐的录屏软件呢? 不用担心,本文将会详细的为您讲解如何使用录屏软件在电脑端录制PDF文件&#…

软件测试jmeter基本使用

1安装与配置 1.jdk下载 下载地址:https://www.oracle.com/java/technologies/downloads/#jdk18-windows(压缩包中会给) 2.jmeter下载 Apache JMeter - Download Apache JMeter(压缩包中有) 3.操作教学 打开软件后新…

【MySQL数据库】SQL查询语句总结

目录 一、查询数据 1.1 基本查询语句 1.2 表单查询 1.3 WHERE子句 1.3.1 IN关键字查询 1.3.2 Between查询范围 1.3.3 Like匹配查询 1.3.4 AND多条件查询(等同于&&) 1.3.5 OR多条件查询(等同于||) 1.3.6 LIMIT子句 1.3.7 对…

【Node.js】笔记整理4 - 版本管理工具nvm

写在最前:跟着视频学习只是为了在新手期快速入门。想要学习全面、进阶的知识,需要格外注重实战和官方技术文档,文档建议作为手册使用 系列文章 【Node.js】笔记整理 1 - 基础知识【Node.js】笔记整理 2 - 常用模块【Node.js】笔记整理 3 - n…

【docker】docker安装与优化

目录 一、安装Docker 1、关闭防火墙 2、安装依赖包 3、设置阿里云镜像源 4、安装Docker-CE社区版并设置为开机自启动 5、查看Docker信息 二、设置镜像加速 1、申请加速地址 2、实现加速操作 三、网络优化 1、如何网络优化 2、具体操作 四、docker-server端配置文件…

前端:实现二级菜单(点击实现二级菜单展开)

效果 代码 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" content"widthdevice-width, i…

【Excel】WPS快速按行筛选过滤

用的筛选都是进行列数据过滤&#xff0c;那么遇到一个情况需要行数据过滤查看数据 行过滤 选中行&#xff0c;然后右键菜单&#xff0c;行筛选。 列过滤

7Docker搭建es和kibana

一、安装es 1.拉取镜像 sudo docker pull elasticsearch:7.12.0 elasticsearch:7.12.0:我安装的版本是7.12.0&#xff0c;可以根据实际的情况安装 创建docker容器挂在的目录&#xff1a; sudo mkdir -p /opt/elasticsearch/config sudo mkdir -p /opt/elasticsearch/data s…

使用Python爬取快手视频与评论(App与Web端分析)

文章目录 1. APP端抓包配置2. APP端抓包分析3. Web端抓包分析4. 爬虫代码实现 【作者主页】&#xff1a;吴秋霖 【作者介绍】&#xff1a;Python领域优质创作者、阿里云博客专家、华为云享专家。长期致力于Python与爬虫领域研究与开发工作&#xff01; 【作者推荐】&#xff1a…

13:kotlin类和对象 -- 属性(Properties)

定义属性 类属性可使用var和val定义 class Address {var name: String "Holmes, Sherlock"var street: String "Baker"var city: String "London"var state: String? nullvar zip: String "123456" }属性使用 fun copyAddres…