导致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本身的高可用性,复 ...
随机推荐
- [转帖]JMeter压测Redis
https://www.cnblogs.com/yjlch1016/p/14052402.html 一.Redis Data Set插件: https://jmeter-plugins.org/wik ...
- 【转帖】io_uring vs epoll ,谁在网络编程领域更胜一筹?
io_uring vs epoll ,谁在网络编程领域更胜一筹? 2021-12-16 1473举报 简介: 从定量分析的角度,通过量化 io_uring 和 epoll 两种编程框架下的相关操作的耗 ...
- [转帖]如何理解 iowait
Linux中,%iowait 过高可能是个问题,严重的时候,它能使服务停止, 但问题是,多高才算高? 什么时候应该担心呢? 本文将讨论 iowait 的含义.相关的统计数据.原理以及 iowait的瓶 ...
- 申威CPU的简单知识梳理
摘要 最近有客户要用申威服务器了 自己很早之前简单测试过相关的CPU的服务器 但是感觉很多东西都不是很系统. 今天简单收集一下资料 希望对以后的工作有所帮助 申威CPU的创始 申威是解放军总参谋部第五 ...
- 境内下载nodejs二进制文件
下载 nodejs 安装包的方法 找到一个境内的淘宝源 可以直接使用 下载速度还比较快 但是没有 龙芯的.. http://npm.taobao.org/mirrors/node/v10.20.0/
- MYSQL 日志参数与性能的关系
1. 先看一下mysql技术内幕 innodb存储引擎的一个结果 以及各个参数的含义
- 我们开源了一个轻量的 Web IDE UI 框架
我们开源了一个轻量的 Web IDE UI 框架 Molecule 一个轻量的 Web IDE UI 框架 简介 Molecule 是一个受 VS Code 启发,使用 React.js 构建的 We ...
- vue3新特性
值得注意的新特性 1==> 组合式 API 2==> Teleport 3==> 片段 4==> 触发组件选项 5==> createRenderer API 来自 @v ...
- sass中使用穿透属性(deep)修改第三方组件样似
<el-form-item> <el-button class="save-btn" type="primary" @click=" ...
- es6 Array.form将类数组或者对象转化为数组
Array.from()方法就是将一个[类数组对象][或者可遍历对象]转换成一个[真正的数组] 那么什么是类数组对象呢?所谓类数组对象,最基本的要求就是具有length属性的对象. let array ...