导致Redis访问慢的常见操作
导致Redis访问慢的原因通常有2个方面:
第一,Redis本身性能出现了瓶颈,如:内存使用率过高,并发过大等
第二,存在大KEY,或者客户端访问命令使用不当引起的阻塞
在此,只列举因为的客户端命令使用不当导致访问Redis慢的操作,表现出来的现象就是:某些接口的访问耗时不稳定,时好时坏。
无序集合“SMEMBERS”命令
当无序集合(SET)中的元素个数很多时,使用“SMEMBERS”命令访问可能会引起Redis访问阻塞。
替代方案:使用SSCAN命令代替SMEMBERS命令。
使用示例:
// 使用SMEMBERS命令访问集合所有元素
Set<String> set = redisTemplate.opsForSet().members(key);
// 使用SSCAN命令访问集合所有元素
Set<String> set = new HashSet<>();
Cursor<String> cursor = this.redisTemplate.opsForSet().scan(key, ScanOptions.NONE);
try {
while (cursor.hasNext()) {
String value = cursor.next();
set.add(value)
}
} finally {
try {
cursor.close();
} catch (Exception e) {}
}
哈希集合“HGETALL”命令
当哈希集合(HASH)中的元素很多时,使用“HGETALL”命令获取所有元素可能会引起Redis访问阻塞。
替代方案:使用HSCAN命令替代HGETALL命令。
使用示例:
// 使用HGETALL命令获取集合所有元素
Map<String, Object> map = redisTemplate.opsForHash().entries(key);
// 使用HSCAN命令访问集合所有元素
Map<String, Object> map = new HashMap<>();
Cursor<Map.Entry<String, Object>> cursor = redisTemplate.opsForHash().scan(key, ScanOptions.NONE);
try {
while (cursor.hasNext()) {
Map.Entry<String, Object> entry = cursor.next();
if (entry.getKey() == null || entry.getValue() == null) {
continue;
}
map.put(entry.getKey(), entry.getValue());
}
} finally {
try {
cursor.close();
} catch (Exception e) {}
}
【参考】
http://kaito-kidd.com/2021/01/23/redis-slow-latency-analysis/ Redis为什么变慢了?一文讲透如何排查Redis性能问题 | 万字长文
http://xiaoyue26.github.io/2020/03/23/2020-03/redis大key问题/ redis大key问题
导致Redis访问慢的常见操作的更多相关文章
- jedis操作redis的几种常见方式总结
Redis是一个著名的key-value存储系统,也是nosql中的最常见的一种,这篇文章主要给大家总结了关于在java中jedis操作redis的几种常见方式,文中给出了详细的示例代码供大家参考学习 ...
- Redis入门很简单之六【Jedis常见操作】
Redis入门很简单之六[Jedis常见操作] http://www.tuicool.com/articles/vaqABb http://www.cnblogs.com/stephen-liu74/ ...
- Redis安装和客户端cli常见操作
安装Redis $ wget http://download.redis.io/releases/redis-4.0.6.tar.gz $ tar xzf redis-4.0.6.tar.gz $ c ...
- redis之常见操作
目录 redis的常见操作 1. redis客户端登录方式 2. 设置密码 3. 获取redis的配置 4. redis键(key) 语法 实例 Redis keys (黄色为重点) redis的常见 ...
- Redis的那些最常见面试问题
随笔:经过长达一周的奔波和面试,电话面试,回首今天终于成功的入职了,总共面试了大概10家公司,包括阿里,京东,IBM等等,京东技术过了,学历因为非统招就被pass了,阿里面了2次电话面试就没下文了,估 ...
- (转)Redis的那些最常见面试问题
背景:最近在准备面试相关的题目,发现redis基本一片空白,有必要好好总结下. 转自:https://www.cnblogs.com/Survivalist/p/8119891.html 1.什么是r ...
- Redis的那些最常见面试问题(转)
Redis的那些最常见面试问题 1.什么是redis? Redis 是一个基于内存的高性能key-value数据库. 2.Reids的特点 Redis本质上是一个Key-Value类型 ...
- Redis 的几种常见使用方式
常见使用方式 Redis 的几种常见使用方式包括: Redis 单副本 Redis 多副本(主从) Redis Sentinel(哨兵) Redis Cluster Redis 自研 各种使用方式的优 ...
- 聊聊redis实际运用及骚操作
前言 聊起 redis 咱们大部分后端猿应该都不陌生,或多或少都用过.甚至大部分前端猿都知道. 数据结构: string. hash. list. set (无序集合). setsorted(有序集合 ...
- hystrix完成对redis访问的资源隔离
相对来说,考虑的比较完善的一套方案,分为事前,事中,事后三个层次去思考怎么来应对缓存雪崩的场景 1.事前解决方案 发生缓存雪崩之前,事情之前,怎么去避免redis彻底挂掉 redis本身的高可用性,复 ...
随机推荐
- [转帖]ELKStack入门篇(二)之Nginx、Tomcat、Java日志收集以及TCP收集日志使用
https://www.cnblogs.com/linuxk/p/9273160.html 1.收集Nginx的json格式日志 1.1.Nginx安装 1.2.配置logstash [root@ ...
- [转帖]Linux下使用 ipset 封大量IP及ipset参数说明
https://www.cnblogs.com/xiaofeng666/p/10952627.html Linux使用iptables封IP,是常用的应对网络攻击的方法,但要封禁成千上万个IP,如果添 ...
- 查看java所有的线程信息
最近一直有一个困惑, 不知道如何查看所有的java的线程信息. 今天看blog时发现了一个简单方法 ps -Tp $pid 就可以了 也可以使用 ps- Lfp $pid的方式 这里简单写一下统计方法 ...
- docker -- images镜像消失问题排查
1. 问题描叙 安装model-serving组件时,错误日志输出push时对应的tag不存在,导致镜像推送失败 2. 问题排查 # 找到对应镜像,尝试手动推送 docker images|grep ...
- vue如何在render函数中循环(3)
h函数的三个参数 第一个参数是必须的. 类型:{String | Object | Function} 一个 HTML 标签名.一个组件.一个异步组件.或一个函数式组件. 是要渲染的html标签. 第 ...
- golang uuid库介绍
简介: 在现代软件开发中,全球唯一标识符(UUID)在许多场景中发挥着重要的作用.UUID是一种128位的唯一标识符,它能够保证在全球范围内不重复.在Go语言中,我们可以使用第三方库github.co ...
- win10家庭版禁用更新
前言 2020年初因为疫情在家远程办公,而我老家没有电脑,先后向两位大学生借了两台电脑来办公,发现一个现象:他们的电脑系统都是家庭版,也就是刚买电脑时安装的win10家庭版.也问了其它几位计算机专业的 ...
- 领域知识图谱-中式菜谱知识图谱:实现知识图谱可视化和知识库智能问答系统(KBQA)
领域知识图谱-中式菜谱知识图谱:实现知识图谱可视化和知识库智能问答系统(KBQA) A knowledge graph for Chinese cookbook(中式菜谱知识图谱),可以实现知识图谱可 ...
- 使用visio如何快速生成一个网格状图案,文档技巧!
如何使用visio如何快速生成一个网格状图案 我的成果图: 操作步骤如下: 1.新建一个visio文件,选择"基本框图".点击创建. 2.从左侧形状窗口中基本形状中选中正方形拖动到 ...
- SpringBoot中优雅地实现统一响应对象
目录 前言 实现步骤 定义统一响应对象类 定义一个忽略响应封装的注解 实现ResponseBodyAdvice接口 定义Controller类 总结 前言 近日心血来潮想做一个开源项目,目标是做一款可 ...