iis服务器助手广告
返回顶部
首页 > 资讯 > 精选 >Redis bigkeys命令会阻塞问题如何解决
  • 693
分享到

Redis bigkeys命令会阻塞问题如何解决

2023-07-05 18:07:19 693人浏览 独家记忆
摘要

这篇文章主要介绍“Redis bigkeys命令会阻塞问题如何解决”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Redis bigkeys命令会阻塞问题如何解决”文章能帮助大家解

这篇文章主要介绍“Redis bigkeys命令会阻塞问题如何解决”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Redis bigkeys命令会阻塞问题如何解决”文章能帮助大家解决问题。

一、 顺丰高级开发工程师在线执行了 Redis 危险命令导致某公司损失 400 万

Redis bigkeys命令会阻塞问题如何解决

一个命令损失数百万,这,需要赔偿吗?

代码不规范,同事两行泪,撸码需谨慎!

处于好奇考虑,我来测试一下,这到底是什么问题?

二、测试一下1000万数据的性能

1、编写脚本文件

写入1000万数据。

for((i=1;i<=10000000;i++)); do echo "set k$i 哪吒编程$i" >> /tmp/test1.txt;done;

通过/tmp/test1.txt查看一下是否写入成功。

Redis bigkeys命令会阻塞问题如何解决

2、写入Redis1000万数据

cat /tmp/test1.txt | redis-cli -a 111111 --pipe

Redis bigkeys命令会阻塞问题如何解决

3、通过keys * 查看1000万数据

Redis bigkeys命令会阻塞问题如何解决

4、通过配置文件禁止keys *的使用

在redis.conf文件中配置security:

  rename- command keys ""  rename- command flushdb ""  rename- command flushall ""

三、使用scan替代keys *

Redis Scan 命令用于迭代数据库中的数据库键。

SCAN 命令是一个基于游标的迭代器,每次被调用之后, 都会向用户返回一个新的游标, 用户在下次迭代时需要使用这个新游标作为 SCAN 命令的游标参数, 以此来延续之前的迭代过程。

SCAN 返回一个包含两个元素的数组, 第一个元素是用于进行下一次迭代的新游标, 而第二个元素则是一个数组, 这个数组中包含了所有被迭代的元素。如果新游标返回 0 表示迭代已结束。

scan语法:

SCAN cursor [MATCH pattern] [COUNT count]

Redis bigkeys命令会阻塞问题如何解决

四、拒绝bigkey

1、阿里云Redis开发规范

阿里云Redis开发规范中明确规定“拒绝bigkey(防止网卡流量、慢查询)”

String类型控制在10KB以内,hash、list、set、zset元素个数不要超过5000。

2、出现bigkey时如何删除?

  1. String类型的用del删除。

  2. 其它类型使用hscan、sscan、zscan方式渐进式删除,同时要避免bigkey过期时间自动删除问题,因为它会造成主线程阻塞。

Hash 删除: hscan+hdel

public void delBigHash(String host, int port, String passWord, String bigHashKey) {    Jedis jedis = new Jedis(host, port);    if (password != null && !"".equals(password)) {        jedis.auth(password);    }    ScanParams scanParams = new ScanParams().count(100);    String cursor = "0";    do {        ScanResult<Entry<String, String>> scanResult = jedis.hscan(bigHashKey, cursor, scanParams);        List<Entry<String, String>> entryList = scanResult.getResult();        if (entryList != null && !entryList.isEmpty()) {            for (Entry<String, String> entry : entryList) {                jedis.hdel(bigHashKey, entry.geTKEy());            }        }        cursor = scanResult.getStrinGCursor();    } while (!"0".equals(cursor));        //删除 bigkey    jedis.del(bigHashKey);}

3、bigkey会造成哪些问题?

  1. 内存不均,集群迁移困难;

  2. 超时删除,阻塞线程;

  3. 网络流量阻塞;

4、如何发现bigkey?

(1)通过redis-cli --bigkeys查找。

Redis bigkeys命令会阻塞问题如何解决

(2)计算每个键值的字节数,通过memory usage key查找

Redis bigkeys命令会阻塞问题如何解决

关于“Redis bigkeys命令会阻塞问题如何解决”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注编程网精选频道,小编每天都会为大家更新不同的知识点。

--结束END--

本文标题: Redis bigkeys命令会阻塞问题如何解决

本文链接: https://www.lsjlt.com/news/354504.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Redis bigkeys命令会阻塞问题如何解决
    这篇文章主要介绍“Redis bigkeys命令会阻塞问题如何解决”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Redis bigkeys命令会阻塞问题如何解决”文章能帮助大家解...
    99+
    2023-07-05
  • 如何解决Process.getInputStream()阻塞的问题
    这篇文章主要介绍了如何解决Process.getInputStream()阻塞的问题,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。Process.getInputStream...
    99+
    2023-06-15
  • 如何解决TCP socket的阻塞问题
    目录解决TCP socket的阻塞问题在异常处理程序当中退出socket连接TCP连接阻塞的监控和处理我们整理出符合该类异常的特征如下如何查看一个连接的创建时间解决TCP socke...
    99+
    2024-04-02
  • 解决Process.getInputStream()阻塞的问题
    Process.getInputStream()阻塞问题 Java中 Runtime.getInstance().exec (String cmd) 或者 new Proc...
    99+
    2024-04-02
  • 如何解决基于Process#waitFor()阻塞问题
    这篇文章主要介绍了如何解决基于Process#waitFor()阻塞问题,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。Process#waitFor()阻塞问题有时需要在程序...
    99+
    2023-06-22
  • quartz任务阻塞问题怎么解决
    解决Quartz任务阻塞问题的方法有以下几种:1. 增加线程池大小:默认情况下,Quartz使用一个线程执行任务。如果任务较多或者任...
    99+
    2023-09-18
    quartz
  • 基于Process#waitFor()阻塞问题的解决
    目录Process#waitFor()阻塞问题Process.waitFor()导致主线程堵塞Process#waitFor()阻塞问题 有时需要在程序中调用可执行程序或脚本命令: ...
    99+
    2024-04-02
  • Android中bindservice阻塞问题怎么解决
    在Android中,绑定服务(bindService)是一种异步操作,它不会阻塞主线程。但有时候可能会出现与服务通信的操作阻塞了UI...
    99+
    2024-02-29
    Android
  • 怎么解决TCP socket的阻塞问题
    小编给大家分享一下怎么解决TCP socket的阻塞问题,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!解决TCP socket的阻塞问题大家知道,tcp...
    99+
    2023-06-22
  • 如何解决java调用process线程阻塞的问题
    这篇文章将为大家详细讲解有关 如何解决java调用process线程阻塞的问题,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。java调用process线程阻塞问题项目需求中涉及java调用.bat文件进行...
    99+
    2023-06-15
  • 解决Java中socket使用getInputStream()阻塞问题
    目录socket使用getInputStream()阻塞用线程解决Socket的getInputStream阻塞1.背景2.问题3.原因4.解决办法5.Socket通信注意事项soc...
    99+
    2024-04-02
  • tomcat高并发阻塞问题怎么解决
    要解决Tomcat高并发阻塞问题,可以考虑以下几个方面:1. 调整Tomcat配置:增加Tomcat的线程池大小、调整连接超时时间等...
    99+
    2023-10-12
    tomcat
  • 解决SecureRandom.getInstanceStrong()引发的线程阻塞问题
    目录1. 背景介绍2. 现象展示2.1 windows7下运行结果2.2 centos7下运行结果3. 现象分析3.1 linux阻塞分析3.2 windows下运行结果分析4. 结...
    99+
    2024-04-02
  • java调用process线程阻塞问题的解决
    java调用process线程阻塞问题 项目需求中涉及java调用.bat文件进行图像处理,先直接上简略版程序 public void draw(){ //调用b...
    99+
    2024-04-02
  • weblogic线程阻塞如何解决
    WebLogic线程阻塞问题可以通过以下方法来解决:1. 检查应用程序代码:检查应用程序的代码,确保没有出现死循环、无限循环或其他无...
    99+
    2023-09-01
    weblogic
  • 如何解决jQuery同步Ajax带来的UI线程阻塞问题
    这篇文章主要介绍如何解决jQuery同步Ajax带来的UI线程阻塞问题,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!事情起因是这样的,因为页面上有多个相似的异步请求动作,本着提高代码...
    99+
    2024-04-02
  • 解决bufferedReader.readLine()读到最后发生阻塞的问题
    bufferedReader.readLine()读到最后发生阻塞 最近在做一个imageserver,需求简化后就是使用socket响应HTTP请求从而截取所需要的数据流,写入到服...
    99+
    2024-04-02
  • Java中socket使用getInputStream()阻塞问题怎么解决
    这篇文章主要介绍“Java中socket使用getInputStream()阻塞问题怎么解决”,在日常操作中,相信很多人在Java中socket使用getInputStream()阻塞问题怎么解决问题上存在疑惑,小编查阅了各式资料,整理出简...
    99+
    2023-06-22
  • MySQL查询阻塞该如何解决
    MySQL查询阻塞该的解决方法:在终端运行命令:“mysql> show full processlist;”查看当前是否有很多的select的线程,如果多,就适当kill掉这些Waiting for table level lock...
    99+
    2024-04-02
  • Spring多定时任务@Scheduled执行阻塞问题解决
    目录一. 问题描述二. 场景复现三. 解决方案方案一:使用@Async注解实现异步任务方案二:手动设置定时任务的线程池大小四. 总结一. 问题描述 最近项目中发现一个问题,计划每日凌...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作