当前位置: 首页 > news >正文

Redis变慢了?

Redis变慢了?

  • 什么是Redis?
  • 测定Redis变慢?
    • 最大响应延迟
    • 平均响应延迟
    • 设置Redis慢日志
  • 分析Redis变慢
    • bigkeys
    • bigkey的危害
    • bigkey优化
  • 写在最后

什么是Redis?

作为一个技术人员来说,大家用的最多的可能就是Redis了,那么什么是Redis呢?这里简单描述一下。 Redis是key-value 存储系统,是跨平台的非关系型数据库。支持丰富的数据结构,包括:字符串(String)、哈希(Hash)、列表(list)、集合(sets)和有序集合(sorted sets)等类型。那么如何来测定认为Redis变慢了呢?

测定Redis变慢?

如何来测定Redis变慢了呢?最直观的方法就是检测到使用Redis的业务响应变慢了,甚至响应超时了,那么当然也有可以人工来观测Redis是否变慢的办法,在测试Redis是否变慢之前首先要有一个变慢的基准,也就是说定一个红线,当响应时长超过红线了,那么就认为Redis变慢了,可以开始排查变慢原因以及相关Redis的优化了。那么这个基准怎么来呢?不同的Redis服务器基准定然是不一样的,下面我们来测一下。

最大响应延迟

先来测一下Redis最大响应延迟,在Redis服务器上执行命令,测试60秒内最大响应时长

[root@middle.6.118 ~]#redis-cli -h 127.0.0.1 -p 6379 --intrinsic-latency 60

返回结果
在这里插入图片描述
可以看到60秒内最大响应延迟就是1742微秒(1.742毫秒)

平均响应延迟

下面我们再来看一下Redis的最小、最大、平均延迟,每隔1秒采样一次

[root@middle.6.118 ~]#redis-cli -h 127.0.0.1 -p 6379 --latency-history -i 1

返回结果
在这里插入图片描述
可以看到在这段时间内平均延迟最大0.42毫秒。
那么后续当你发现某一天你的Redis响应平均延迟超过这个数值的话你就可以认为Redis变慢了。

设置Redis慢日志

这里你可以通过登录Redis服务器来设置Redis的慢日志,方便后续根据慢日志查找问题

# 登录Redis[root@middle.6.118 ~]#redis-cli -h 127.0.0.1 -p 6379# 慢日志记录超过5毫秒的执行记录127.0.0.1:6379> CONFIG SET slowlog-log-slower-than 5000# 保留最近50条慢日志 这个根据业务需要127.0.0.1:6379> CONFIG SET slowlog-max-len 50

查看慢日志列表

# 10 表示指定条数 不指定则查询全部127.0.0.1:6379> SLOWLOG get 10

在这里插入图片描述
其中:
1)慢日志id
2)执行时间戳
3)执行耗时
4)执行命令、参数
查看指定id慢日志详情

127.0.0.1:6379> SLOWLOG get 18338215

在这里插入图片描述
清空慢日志

127.0.0.1:6379> SLOWLOG RESET

在这里插入图片描述

分析Redis变慢

Redis变慢会有多方面的原因

bigkeys

比如说你存写的value太大,会导致Redis在读取这个key对应的大value时响应变慢导致后续响应都会拖慢,排查bigkeys命令

[root@middle.6.118 ~]#redis-cli -h 127.0.0.1 -p 6379 --bigkeys -i 0.01

其中 -i 0.01的单位是秒 You can use -i 0.1 to sleep 0.1 sec
在这里插入图片描述
在这里插入图片描述
其中我们可以看到每种数据类型所占用的最大内存 / 拥有最多元素的 key 是哪一个,以及每种数据类型在整个实例中的占比和平均大小 / 元素数量。

bigkey的危害

1.响应变慢、超时阻塞 Redis是单线程运行,同一时段只能处理一个请求,处理bigkeys时会比较耗时,请求响应变慢,同时也会阻塞其他请求处理。
2.网络阻塞 比如说一个bigkeys是1MB,那么同时处理1000个的话就是1000MB流量,造成网络阻塞。
3.内存分布不均 Redis集群场景下,当当部分bigkeys分布在同一个节点时导致内存倾斜在这一个节点,内存分布不均。

bigkey优化

1.业务应用尽量避免写入 bigkey。
2.删除bigkey,用 UNLINK 命令替代 DEL,此命令可以把释放 key 内存的操作,放到后台线程中去执行,从而降低对 Redis 的影响。

写在最后

后续会继续分析其他场景下Redis变慢的情况,敬请关注。

相关文章:

Redis变慢了?

Redis变慢了? 什么是Redis?测定Redis变慢?最大响应延迟平均响应延迟设置Redis慢日志 分析Redis变慢bigkeysbigkey的危害bigkey优化 写在最后 什么是Redis? 作为一个技术人员来说,大家用的最多的可能就是Redis了&#…...

11.6.k8s实战-节点扩缩容

目录 一,需求描述 二、集群缩容-节点下线 1,节点下线案例说明 2,查看现有节点 3,查看所有名称空间下的pod ​编辑4,驱逐下线节点的pod 5,驱逐后再次查看pod 6,驱逐pod后再次查看节点信息…...

相亲交友APP系统|婚恋交友社交软件|语音聊天平台定制开发

在现代社会,婚恋交友已经成为了人们日常生活中的一项重要任务。为了方便用户进行相亲交友活动,各种相亲交友APP系统和婚恋交友社交软件应运而生。本文将介绍相亲交友APP系统、婚恋交友社交软件的开发以及语音聊天平台的定制开发的相关知识和指导。 一、…...

2005-2022年款福特福克斯维修手册和电路图线路图接线图资料更新

经过整理,2005-2022年款福特福克斯全系列已经更新至汽修帮手资料库内,覆盖市面上99%车型,包括维修手册、电路图、新车特征、车身钣金维修数据、全车拆装、扭力、发动机大修、发动机正时、保养、电路图、针脚定义、模块传感器、保险丝盒图解对…...

nodejs爬取小红书图片

昨天的文章已经描述了可以抓取评论区内容, 抓取图片内容和抓取评论区的内容基本一致 我们可以看到接口信息中含有图片链接,我们要做的就是爬取图片链接然后下载 这边要用到的模块为const downloadrequire(download) 将爬到的图片链接存放到images数组…...

MySQL从5.7升级到8.0步骤及其问题

MySQL从5.7升级到8.0步骤及其问题 前言 本文源自微博客,且以获得授权,请尊重版权。 一、需求背景 Docker环境下,MySQL5.7升级到8.0,数据迁移时使用的是mysqldump方式迁移。 二、迁移步骤 数据备份: docker exec -i 1…...

中年帕金森:守护健康,从容面对生活挑战

在快节奏的现代生活中,中年人群面临着越来越多的健康挑战。其中,帕金森病作为一种常见的神经系统疾病,逐渐引起了人们的关注。帕金森病不仅影响患者的身体健康,还对其日常生活造成极大的困扰。那么,我们该如何应对中年…...

oracle块跟踪

1.查询块跟踪 select status,filename,bytes from v$block_change_tracking;2.打开块跟踪 ALTER DATABASE ENABLE BLOCK CHANGE TRACKING USING FILE /home/oracle/block_change_tracking.log;3.关闭块跟踪 ALTER DATABASE DISABLE BLOCK CHANGE TRACKING;4.解释 Oracle数据…...

【机器学习】第3章 K-近邻算法

一、概念 1.K-近邻算法:也叫KNN 分类 算法,其中的N是 邻近邻居NearestNeighbor的首字母。 (1)其中K是特征值,就是选择离某个预测的值(例如预测的是苹果,就找个苹果)最近的几个值&am…...

求和 最大值 最小值 reduce Math.min Math.max

let arr [ 8,4,3,9,2]let sum arr.reduce((a,b) > ab)console.log(sum) // 求和 26let max arr.reduce((a,b) > a>b?a:b)console.log(max) // 最大值 9console.log(Math.max(...arr))let min arr.reduce((a,b) > a<b?a:b)console.log(min) // 最小值 2co…...

MyBatis 源码分析--获取SqlSession

前言&#xff1a; 前文我们从源码层面梳理了 SqlSessionFactory 的创建过程&#xff0c;本篇我们继续分析一下 SqlSession 的获取过程。 初识 MyBatis 【MyBatis 核心概念】 案例代码&#xff1a; public class MyBatisTest {Testpublic void test() throws IOException {/…...

Upload-Labs:Pass - 1(JS前端白名单)

Pass_1 1. 上传测试2. 代码审计**获取文件输入的值**&#xff1a;**检查是否选择了文件**&#xff1a;**定义允许的文件类型**&#xff1a;**提取文件的扩展名**&#xff1a;**检查文件类型是否允许上传**&#xff1a;**构建错误消息并提醒用户**&#xff1a; 3.绕过思路3.1 将…...

vue大作业-实现学校官网

vue大作业-实现学校官网 基于vue2实现的学校官网 项目展示 学校官网介绍 欢迎访问我们学校的官方网站&#xff0c;这里为您提供了全面的信息和资源&#xff0c;帮助您更好地了解我们的教育理念、教学资源和学术活动。 首页 首页是您了解我们学校的起点。这里展示了学校的最…...

24面试记录002

文章目录 12、brpc的优化2.1 brpc网络有啥降级&#xff1f; 3、移动语义4、python协程 二、1. mq怎么保障数据的顺序&#xff1f;3.brpc中上下游通信&#xff0c;怎么测评新增字段大小&#xff0c;对耗时的影响&#xff1f; 1 1、brpc和grpc区别&#xff0c;为啥选择brpc? gr…...

cocos 按钮

1、创建按钮 2、创建脚本 3、将脚本挂载到其他节点上 4、将节点和按钮绑定 即可实现点击按钮触发脚本。 在触发的脚本函数里面设置按钮节点的位置&#xff0c;将其移除屏幕&#xff0c;可以实现点击消失按钮的效果。...

文件扫描工具都有哪些?职场大佬都在用的文本提取工具大盘点~

回想起刚毕业初入职场那阵子&#xff0c;领导让帮忙把纸质文件扫描提取为文本时&#xff0c;还只会傻乎乎地一点点操作&#xff0c;属实是费劲得很&#xff01; 好在后面受朋友安利&#xff0c;找到了4个能够快速实现文件扫描文字提取的方法&#xff0c;这才让我的办公效率蹭蹭…...

【学习】程序员资源网站

1 书栈网 简介&#xff1a;书栈网是程序员互联网IT开源编程书籍、资源免费阅读的网站&#xff0c;在书栈网你可以找到很多书籍、笔记资源。在这里&#xff0c;你可以根据热门收藏和阅读查看大家都在看什么&#xff0c;也可以根据技术栈分类找到对应模块的编程资源&#xff0c;…...

游戏缓存与异步持久化的完美邂逅

1、问题提出 游戏服务器,需要频繁的读取玩家数据,同时也需求频发修改玩家数据,并持久化到数据库。为了提高游戏服务器的性能,我们应该怎么处理呢? 2、针对读——使用缓存 缓存,是指应用程序从数据库读取完数据之后,就将数据缓存在进程内存或第三方内存(例如redis)。…...

MySQL 高级 - 第十二章 | 数据库的设计规范

目录 第十二章 数据库的设计规范12.1 为什么需要数据库设计12.2 范式12.2.1 范式简介12.2.2 范式都包括哪些12.2.3 键和相关属性的概念12.2.4 第一范式&#xff08;1st NF&#xff09;12.2.5 第二范式&#xff08;2nd NF&#xff09;12.2.6 第三范式&#xff08;3rd NF&#xf…...

【Python】AJAX

AJAX基础 一、AJAX1.1 概述1.2 XMLHttpRequest对象1.3 AJAX请求六部曲1.4 图解AJAX请求步骤 二、jQuery与AJAX2.1 jQuery.get()2.2 jQuery.getJSON()2.3 jQuery.post()2.4 jQuery.ajax() 三、Django使用AJAX3.1 请求类型3.2 PUT与PATCH的区别3.3 接收及响应JSON3.3.1 接收JSON3…...

AutoUnipus:重新定义U校园学习效率的智能解决方案

AutoUnipus&#xff1a;重新定义U校园学习效率的智能解决方案 【免费下载链接】AutoUnipus U校园脚本,支持全自动答题,百分百正确 2024最新版 项目地址: https://gitcode.com/gh_mirrors/au/AutoUnipus 还在为U校园平台上堆积如山的网课任务而焦虑吗&#xff1f;每天花费…...

从零开始:如何为你的深度学习项目选择最合适的开源数据集

从零开始&#xff1a;如何为你的深度学习项目选择最合适的开源数据集 当你站在深度学习项目的起点&#xff0c;面对琳琅满目的开源数据集时&#xff0c;如何做出明智的选择往往决定了项目的成败。数据集不仅是模型训练的"原材料"&#xff0c;更是影响最终性能的关键变…...

DbGate数据库管理工具:Docker一键部署与跨平台远程访问实战

1. 为什么选择DbGateDocker组合 第一次接触DbGate是在一个需要同时管理MySQL和MongoDB的项目中。当时团队里有人用Navicat&#xff0c;有人用DBeaver&#xff0c;数据库类型切换时总要重新适应界面。直到发现这个支持多数据库的开源工具&#xff0c;才真正体会到什么叫"一…...

Souliss嵌入式状态同步框架:轻量级去中心化智能家居通信实践

1. Souliss 智能家居网络框架深度解析&#xff1a;面向嵌入式工程师的底层通信架构实践指南Souliss 是一个专为资源受限嵌入式节点设计的轻量级、去中心化智能家居网络框架。其核心目标并非构建通用物联网平台&#xff0c;而是解决真实家庭场景中多协议共存、低功耗节点协同、边…...

中国跨境电商大会代理授权机制与决策影响分析

对于众多寻求通过“中国跨境电商大会”精准撬动海外市场的企业而言&#xff0c;面对琳琅满目的代理商选择&#xff0c;决策过程本身就是一次关于市场洞察、风险评估与资源匹配的深度考验。一个优质的代理商&#xff0c;不仅是展位的“售票员”&#xff0c;更是企业出海战略的“…...

终极Windows 11安装指南:3分钟轻松绕过硬件检测限制

终极Windows 11安装指南&#xff1a;3分钟轻松绕过硬件检测限制 【免费下载链接】MediaCreationTool.bat Universal MCT wrapper script for all Windows 10/11 versions from 1507 to 21H2! 项目地址: https://gitcode.com/gh_mirrors/me/MediaCreationTool.bat 还在为…...

从浮点到定点:手把手教你用MATLAB自定义函数实现加减乘除(避坑溢出与精度损失)

从浮点到定点&#xff1a;手把手教你用MATLAB自定义函数实现加减乘除&#xff08;避坑溢出与精度损失&#xff09; 当算法需要从实验室环境迁移到嵌入式设备时&#xff0c;浮点运算的硬件开销常常成为瓶颈。这时定点数运算就像一把手术刀——精准控制每个比特的用途&#xff0c…...

NaViL-9B多模态提示词工程:提升图文理解准确率的10个实用技巧

NaViL-9B多模态提示词工程&#xff1a;提升图文理解准确率的10个实用技巧 1. 认识NaViL-9B多模态模型 NaViL-9B是一款原生支持多模态交互的大语言模型&#xff0c;能够同时处理文本和图像输入。与传统的纯文本模型不同&#xff0c;它可以直接"看懂"图片内容&#x…...

aircrack-ng使用教程

aircrack-ng是一款用于无线网络安全评估的工具套件&#xff0c;主要用于破解WEP和WPA/WPA2-PSK加密的无线网络密码。它通过分析捕获的数据包&#xff0c;利用密码破解技术来获取网络密钥&#xff0c;是网络安全测试和渗透测试中常用的工具之一。该工具支持多种攻击模式和优化选…...

课堂教学质量综合评分系统

目录 一、项目环境与目录结构 1. 环境要求 2. 推荐目录结构 二、核心类设计&#xff1a;ClassroomScorer 三、关键代码深度解析 1. 基础路径配置 2. 初始化方法&#xff1a;极致灵活的配置 3. 上下文管理器&#xff1a;统一封装 CSV 读取 4. 数据加载&#xff1a;4 类 …...