Redis 运维规范_命令使用规范

梦莱12个月前技术文章216

二、命令使用规范

1、keys *

keys * 命令原理是扫描整个 Redis 里面所有 key,该命令执行期间其他发送向 Redis 服务端的命令,都会被阻塞。scan 命令是一个基于游标的迭代器,可以每次少量多次的返回数据。

命令

keys

scan

优点

速度很快

不会造成长时间阻塞

缺点

Redis 单线程,执行期间会阻碍其他命令的执行,导致性能问题

返回结果可能重复,需要客户端去重,整体执行时间可能要比keys命令长

基于 scan 的这种安全性,建议 Redis 版本为 2.8.0 及以上的生产环境,考虑使用 scan 命令来代替 keys 。

2、复杂命令

(1)遍历

例如对于 List 类型,它的两种底层实现结构:双向链表和压缩列表的操作复杂度都是 O(N);如果使用遍历复杂度为O(n),对于大 key 来说就会有时延等性能问题;对于 List 类型,它的 POP/PUSH 效率很高,可以尽量将它主要用于 FIFO 队列场景。

图片2.png

(2)聚合命令

聚合命令需谨慎使用。对于数据的聚合操作应由客户端或者只读实例完成,尽量避免让 Redis 进行 SUNIONSTORE 、SDIFFSTORE 等聚合命令,这些操作会消耗大量 CPU 资源,导致主线程繁忙。如果不可避免要执行这类命令,要保证 N 尽量小。

对于遍历操作建议尽量使用对应的 SCAN 操作(包括 HSCAN,SSCAN, ZSCAN) 代替,避免在 Redis 内部产生费时的全集合遍历操作。

3、高危命令

对于一些高危命令包括keys、 flushdb、flushall 等。主要需要注意以下两点:

(1) 例如执行 FLUSHALL 会直接清空全部数据,FLUSHDB 清空当前库。对于该类命令等执行要慎重。

(2)由于 Redis 对读写请求都为单线程工作,如果执行命令涉及大量操作或耗时较长,都会阻塞主线程导致其它请求无法正常进行。

建议:云上 Redis 可以在控制台上通过设置 #no_loose_disabled-commands 参数来禁用一些可能影响 Redis 服务性能、危害数据安全的命令。

4、大 key 删除

(1) 对于 Redis 4.0 及之后版本,可以通过 UNLINK 命令安全地删除大 Key 甚至特大Key,该命令能够以非阻塞的方式,逐步地清理传入的Key

unlink key 命令:根据 value 选择非阻塞删除,仅将 keys 从 keyspace 元数据中删除,真正的删除会在后续异步操作。

(2)对于 Redis 2.8 之后及 Redis 4.0 之前,可以通过 SCAN 命令读取部分数据,然后进行删除,避免一次性删除大量 key 导致 Redis 阻塞。

5、monitor 命令

Redis 的 MONITOR 命令能够忠实地打印 Redis 中的所有请求,包括时间信息、Client信息、命令以及Key信息。在发生紧急情况时,可以通过短暂执行 MONITOR 命令并将返回信息输入至文件,对文件中请求进行归类分析,找出这段时间中的热 Key 。但 Monitor 本身对 Redis 的性能有一定的影响,若不进行相关问题排查和分析时,不建议开启。


相关文章

Jenkinsfile说明

Jenkinsfile说明

当我们在使用jenkins进行CI/CD的时候,简单的内容我们可以通过jenkins页面来实现配置。但是如果有复杂的需求还是需要通过jenkinsfile来实现jenkinsfile简单介绍Jenki...

Clickhouse表引擎介绍

Clickhouse表引擎介绍

引擎分类ClickHouse表引擎一共分为四个系列,分别是Log、MergeTree、Integration、Special。其中包含了两种特殊的表引擎Replicated、Distributed,功...

ES运维(一)底层数据存储原理

ES运维(一)底层数据存储原理

1、ES底层数据存储原理架构图Segment工作流程:A、 新的文档在内存中组织B、 每隔一段时间,buffer将会被提交:生成一个新的segment(一个额外的新的倒序索引)并被写到磁盘,同时一个新...

ChaosBlade介绍

ChaosBlade介绍

ChaosBlade 是阿里巴巴开源的一款遵循混沌工程原理和混沌实验模型的实验注入工具,帮助企业提升分布式系统的容错能力,并且在企业上云或往云原生系统迁移过程中业务连续性保障。Chaosblade 是...

Centos7 升级内核

1、查看当前内核版本$ uname -rsLinux 3.10.0-1160.45.1.el7.x86_642、安装 ELRepo# 载入公钥$ rpm --import https://www.el...

Kafak顺序写入与数据读取详解

Kafak顺序写入与数据读取详解

生产者(producer)是负责向Kafka提交数据的,Kafka会把收到的消息都写入到硬盘中,它绝对不会丢失数据。为了优化写入速度Kafak采用了两个技术,顺序写入和MMFile。1. 顺序写入因为...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。