Redis变慢了?

本文涉及的产品
云数据库 Redis 版,社区版 2GB
推荐场景:
搭建游戏排行榜
简介: 简要简述如何评测redis变慢了以及针对变慢问题的优化

什么是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

返回结果

image.png

可以看到60秒内最大响应延迟就是1742微秒(1.742毫秒)

平均响应延迟

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

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

返回结果

image.png

可以看到在这段时间内平均延迟最大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 get10

image.png

其中1)慢日志id 2)执行时间戳 3)执行耗时 4)执行命令、参数

查看指定id慢日志详情

127.0.0.1:6379> SLOWLOG get18338215

image.png

清空慢日志

127.0.0.1:6379> SLOWLOG RESET

image.png

分析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

image.png

image.png

其中我们可以看到每种数据类型所占用的最大内存 / 拥有最多元素的 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协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore     ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
存储 监控 NoSQL
一篇搞定Redis中的BigKey问题
BigKey的具体表现是redis中的key对应的value很大,占用的redis空间比较大,本质上是大value问题。
1081 0
|
3天前
|
存储 运维 监控
为什么我的 Redis 变慢了
为什么我的 Redis 变慢了
31 1
|
3天前
|
存储 缓存 NoSQL
Redis内存数据满了导致宕机
Redis内存数据满了导致宕机
20 0
|
3天前
|
缓存 监控 NoSQL
Redis 突然变慢了如何排查并解决?
Redis 突然变慢了如何排查并解决?
69 2
|
5月前
|
存储 缓存 NoSQL
Redis高并发缓存介绍
Redis高并发缓存介绍
47 1
|
7月前
|
存储 NoSQL Redis
Redis之bigkey问题解读
Redis之bigkey问题解读
|
9月前
|
NoSQL Java Redis
redis单线程为什么慢
redis单线程为什么慢
63 0
|
10月前
|
缓存 监控 NoSQL
Redis高并发场景(九)—缓存雪崩
Redis高并发场景(九)—缓存雪崩
|
10月前
|
存储 缓存 JSON
Redis( stringRedisTemplate)添加缓存数据
在redis中添加缓存数据大致思路: 1,从redis中获取数据,如果存在,直接返回客户端 2,不存在,查询数据库,并写入redis缓存 3,如果从数据库查询为空,返回错误信息 4,写入redis缓存并返回数据
113 0
|
11月前
|
NoSQL Redis
【Redis原理机制 四】基于Redis实现延时任务
【Redis原理机制 四】基于Redis实现延时任务
35 0