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变慢的情况,敬请关注。

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

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

相关文章

EMQX集群搭建

1. 什么是 MQTT? MQTT(Message Queuing Telemetry Transport)是一种轻量级、基于发布-订阅模式的消息传输协议,适用于资源受限的设备和低带宽、高延迟或不稳定的网络环境。它在物联网应用中广受欢迎,能够实现传感器、…

防火墙中的NAT

防火墙的NAT NAT分类 源NAT 基于源IP地址进行转换。 我们之前接触过的静态NAT,动态NAT,NAPT都属于源NAT,都是针对源IP地址进行转换的。源NAT主要目的是为了保证内网用户可以访问公网。 先执行安全策略,后执行NAT 目标NAT 基于…

【数学】什么是最大似然估计?如何求解最大似然估计

背景 最大似然估计(Maximum Likelihood Estimation, MLE)是一种估计统计模型参数的方法。它在众多统计学领域中被广泛使用,比如回归分析、时间序列分析、机器学习和经济学。其核心思想是:给定一个观测数据集,找到一组…

git的分支管理

✨前言✨ 📘 博客主页:to Keep博客主页 🙆欢迎关注,👍点赞,📝留言评论 ⏳首发时间:20246月19日 📨 博主码云地址:博主码云地址 📕参考书籍&#x…

【TB作品】MSP430G2553,单片机,口袋板, 单相交流电压、电流计设计

题5 单相交流电压、电流计设计 设计基于MSP430的单相工频交流电参数检测仪。交流有效值0-220V,电流有效值0-40A。电压、电流值经电压、电流传感器输出有效值为0-5V的交流信号,传感器输出的电压、电流信号与被测电压、电流同相位。 基本要求如下 &#xf…

Linux实时查看Java接口数据

1.Linux实时查看Java接口数据的方法 在Linux系统中实时查看Java接口数据通常涉及几个步骤: (1)编写Java应用程序:首先,你需要有一个Java应用程序,它暴露了一个或多个HTTP接口。这些接口应该返回你想要实时…

php百度云账户余额查询API示例

1、官方文档地址&#xff1a;账户余额查询 请求结构 POST /v{version}/finance/cash/balance HTTP/1.1 Host: billing.baidubce.com ContentType: application/json; charsetutf-8 Content-Length: <Content_Length> Authorization: authorization string 请求头域 …

ubuntu安装本地版overleaf并配置Docker

安装Docker 参考https://blog.csdn.net/2201_76100073/article/details/137025119 更新软件包 sudo apt update sudo apt upgradedocker依赖 sudo apt-get install ca-certificates curl gnupg lsb-release添加docker密钥 curl -fsSL http://mirrors.aliyun.com/docker-ce…

05、部署 YUM 仓库及NFS 共享服务

目录 5.1 部署YUM软件仓库 5.1.1 准备网络安装源&#xff08;服务器端&#xff09; 1、准备软件仓库目录 2、安装并启用vsftpd服务 5.1.2 配置软件仓库位置&#xff08;客户端&#xff09; 5.2 使用yum工具管理软件包 5.2.1 查询软件包 1、yum list——查询软件包列表 …

Python 3 函数

Python 3 函数 函数是Python编程语言的核心组成部分&#xff0c;它们允许我们封装代码块&#xff0c;使其可重用&#xff0c;模块化&#xff0c;并易于维护。在Python 3中&#xff0c;函数的使用和定义都有一些特定的语法和规则。本文将详细介绍Python 3中的函数&#xff0c;包…

DGit的使用

将Remix连接到远程Git仓库 1.指定克隆的分支和深度 2.清理&#xff0c;如果您不在工作区上工作&#xff0c;请将其删除或推送至 GitHub 或 IPFS 以确保安全。 为了进行推送和拉取&#xff0c;你需要一个 PAT — 个人访问令牌 当使用 dGIT 插件在 GitHub 上推送、拉取、访问私…

网关助力边缘物联网

网关助力边缘物联网 在探讨网关如何助力边缘物联网&#xff08;IoT&#xff09;的议题时&#xff0c;我们不得不深入分析这一技术交汇点的复杂性与潜力。边缘计算与物联网的融合&#xff0c;通过将数据处理与分析能力推向网络边缘&#xff0c;即数据生成的地方&#xff0c;极大…

高企如何提高通过率?2024年成都市高新技术企业认定条件和申报提前规划

一、知识产权 1.知识产权布局“前置化” 公司申报高新技术企业在知识产权上要注意知识产权数量和质量双达标。 注&#xff1a;知识产权是高企申报的重要条件&#xff0c;同时也是认定评审的主要得分项。总分100分&#xff0c;其中60分与知识产权相关&#xff08;知识产权情况…

【JVM】常⽤的命令⾏性能监控和故障处理⼯具

在Java应用程序的开发和维护过程中&#xff0c;性能监控和故障处理是至关重要的环节。为了更好地进行这些任务&#xff0c;Java生态系统提供了多种命令行工具。以下是一些常用的性能监控和故障处理工具的详细介绍&#xff1a; 1. jps (Java Virtual Machine Process Status To…

接口性能提升秘籍:本地缓存的总结与实践

&#x1f345;我是小宋&#xff0c; 一个只熬夜但不秃头的Java程序员。 &#x1f345;关注我&#xff0c;带你轻松过面试。提升简历亮点&#xff08;14个demo&#xff09; . . &#x1f30f;号&#xff1a;tutou123com。拉你进面试专属群。 优雅的接口调优之本地缓存优化 接口…

Spring中网络请求客户端WebClient的使用详解

Spring中网络请求客户端WebClient的使用详解_java_脚本之家 Spring5的WebClient使用详解-腾讯云开发者社区-腾讯云 在 Spring 5 之前&#xff0c;如果我们想要调用其他系统提供的 HTTP 服务&#xff0c;通常可以使用 Spring 提供的 RestTemplate 来访问&#xff0c;不过由于 …

初识es(elasticsearch)

初识elasticsearch 什么是elasticsearch&#xff1f;&#xff1a; 一个开源的分部署搜索引擎、可以用来实现搜索、日志统计、分析、系统监控等功能。 什么是文档和词条&#xff1f; 每一条数据就是一个文档对文档中的内容进行分词&#xff0c;得到的词语就是词条 什么是正向…

【elementui源码解析】如何实现自动渲染md文档-第四篇

目录 1.前言 2.md-loader - index.js 1&#xff09;md.render() 2&#xff09;定义变量 3&#xff09;while stripTemplate stripScript genInlineComponentText 4&#xff09;pageScript 5&#xff09;return 6&#xff09;demo-block 3.总结 所有章节&#x…

HTML(9)——字体修饰

常用的字体修饰属性 属性描述font-size字体大小 单位&#xff1a;数字pxfont-weight字体粗细 单位&#xff1a;数字font-style 字体倾斜 line-height行高 单位&#xff1a;数字px/数字(当前size的倍数&#xff09;font-family字体族…

微纳米气泡发生器是微纳米气泡产生装置 未来市场需求将不断释放

微纳米气泡发生器是微纳米气泡产生装置 未来市场需求将不断释放 微纳米气泡发生器即微纳米气泡发生设备&#xff0c;是一种将水和气体混合并产生微纳米气泡的设备。微纳米气泡是指直径在100μm以下的气泡&#xff0c;分为纳米气泡和微米气泡。   微纳米气泡发生器主要由发生设…