前段时间,我司内网环境发生了一件有关Redis阻塞的事情。由于公司业务规模较大,很多数据保存在Redis中,测试人员压测时,压测结果总是不尽人意,出现大批量的timeout的情况,查看服务器时发现CPU飙升,导致请求处理缓慢。经过一番努力,终于找到了事情的源头,新来的开发在本地调试RedisTemplate,这不是重点,重点在于他执行的是keys的模糊匹配,导致Redis阻塞,从而影响压测,好在这仅仅是在内网环境,如果在外网环境使用模糊匹配等耗时的命令,后果不堪设想。

Redis是单线程的,这个特性再重点标记一下,单线程意味着任何一条命令的执行都是串行的,也就是按顺序一条一条的执行。那么当你执行的命令耗时就会导致后续的Redis访问都会阻塞。

对于Rediskeys * 、flushdb、flushall等耗时命令,我们应当慎用,或者禁止使用,这类命令我们可以配置redis.conf禁用这些命令

对于时间复杂度为O(n)的数据操作命令,也应该根据自己的数据量使用,命令如下:

List: lindex、lset、linsert
Hash: hgetall、hkeys、hvals
Set: smembers、sunion、sunionstore、sinter、sinterstore、sdiff、sdiffstore
Sorted Set: zrange、zrevrange、zrangebyscore、zrevrangebyscore、zremrangebyrank、zremrangebyscore

使用scan替代keys命令

scan命令用来分批次扫描Redis记录,保证Redis不会因为耗时导致服务不可用。

语法:
scan cursor [MATCH pattern] [COUNT count]
案例:
scan 0 match report:* count 10
1) "3932160"
2)  1) "report:12360412"2) "report:12749274"
scan 第一个参数是游标,表示从游标开始
返回的第一行是游标,第二行是匹配到的数据,
如果第一行返回0,表示没有更多数据,否则下次使用scan时,就要用第一行返回的值作为scan的游标

Redis 禁止使用耗时命令和时间复杂度为O(n)的命令相关推荐

  1. redis的安装和命令的使用(史上最全命令集合)

    redis的安装和使用 1. redis介绍 1.1 什么是NoSQL NoSQL数据库的产生就是为了解决大规模数据集合多重数据种类带来的挑战,尤其是大数据应用难题.目前一些主流的NOSQL 产品: ...

  2. Redis 基础 -- 有序集合 SortedSet类型 和 SortedSet类型的常用命令

    文章目录 1. 有序集合(SortedSet) 1.1 ZADD:添加或更新成员 1.1.1 更新已有成员的分值 1.1.2 指定要执行的操作 1.1.3 返回被修改成员的数量 1.1.4 时间复杂度 ...

  3. Redis 笔记(15)— 管道 pipeline(客户端将批量命令打包发送用来节省网络开销)

    Redis 是一种基于客户端-服务端模型以及请求/响应协议的 TCP 服务.这意味着通常情况下一个请求会遵循以下步骤: 客户端向服务端发送一个查询请求,并监听 Socket 返回,通常是以阻塞模式,等 ...

  4. redis常用命令_Redis的简介以及基本常用命令

    介绍redis之前,需要先介绍一个基本概念:NoSQL.意思是Not Only SQL,泛指非关系型数据库,是随着互联网发展,为了满足生产需求而产生的一种新的数据库理念 在互联网发展早期的时候,各种传 ...

  5. Python--Redis实战:第三章:Redis命令:第七节:其他命令

    上一篇文章:Python--Redis实战:第三章:Redis命令:第六节:发布与订阅 下一篇文章:Python--Redis实战:第四章:数据安全与性能保障:第1节:持久化选项 到目前为止,本章介绍 ...

  6. 【Redis之ZSet类型的详解ZSet类型中常用命令的实践】

    Redis之ZSet类型的详解&ZSet类型中常用命令的实践 知识回顾: 通过对Redis中的String的命令做了充分的讲解以及实践学习 通过对Redis中String类型之Bit命令的详解 ...

  7. h3csnmp管理命令_H3C S5500V2-EI系列以太网交换机 命令参考-Release 1118-6W100_网络管理和监控命令参考_SNMP命令-新华三集团-H3C...

    设备运行于FIPS模式时,本特性部分配置相对于非FIPS模式有所变化,具体差异请见本文相关描述.有关FIPS模式的详细介绍请参见"安全配置指导"中的"FIPS" ...

  8. linux 命令 抛后台,在后台运行Linux命令的方法

    通常情况下,当你在终端运行一个命令,在你开始输入另外一个命令之前,你必须等待当前命令运行结束.这被称为在前台运行命令,或者前台进程.当一个进程在前台运行时,它占用了你的 shell,并且你可以通过输入 ...

  9. 烽火2640路由器命令行手册-04-网络协议配置命令

    网络协议配置命令 目  录 第1章 IP寻址配置命令... 1 1.1 IP寻址配置命令... 1 1.1.1 arp. 1 1.1.2 arp timeout 2 1.1.3 clear arp-c ...

  10. linux 设置开机自启动服务命令,linux开机自启动服务优化设置命令

    1.设置成英文字符,避免出现乱码 [root@xuegod62 ~]# LANG=en 2.两种配置linux开机自启动服务命令: 1) [root@xuegod62 ~]# ntsysv 2) [r ...

最新文章

  1. 用Python做一个翻译软件,还怕英语不好?
  2. python梦幻西游4小人_梦幻西游大漠插件过鼠标漂移和四小人
  3. 【jQuery】选择器
  4. 干货下载 | 高效金融客户分析体系如何搭建?
  5. zblog php 指定分类,zblogPHP 为某些分类指定分类模板,后台版方法
  6. mysql5.7 skip ssl_MySQL 5.7 的SSL加密方法
  7. 计算机语言发展及未来方向
  8. requireJS和seajs区别?
  9. C++使用stringstream分割字符串
  10. Nginx反向代理及负载均衡
  11. 信息学奥赛一本通 1181:整数奇偶排序 | OpenJudge NOI 1.10 06:整数奇偶排序
  12. CCF201312-5 I’m stuck
  13. RabbitMQ基础进阶教程
  14. sql server期中综合练习
  15. Cocostudio使用简介
  16. Ubuntu16.04 使用小米WiFi 变无线网卡
  17. ESB 分布式处理技术 Remoting
  18. UML大作业【小型超市管理系统】
  19. 机械工程c语言第一学期考试题,科学出版社机械工程图学习题集1~10章答案.ppt
  20. 如何制作U盘启动盘来安装电脑系统

热门文章

  1. Bithumb Global AMA丨Cred加速实现开放金融——打造区块链上蚂蚁金服
  2. SLF4J: Failed to load class “org.slf4j.impl.StaticLoggerBinder”
  3. C# WebBrowser控件使用整理
  4. Django的Model上都有些什么
  5. EIGRP passive-interface
  6. Linux shell脚本基础学习(上)
  7. .NET 2.0中的企业库异常处理块
  8. 1.UML2 软件建模入门与提高 --- 面向对象和软件建模
  9. 8.大数据架构详解:从数据获取到深度学习 --- 机器学习和数据挖掘
  10. 1.Zabbix企业级分布式监控系统 --- 监控系统简介