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

梦莱2年前技术文章646

二、命令使用规范

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 的性能有一定的影响,若不进行相关问题排查和分析时,不建议开启。


相关文章

ES部署以及扩容

ES部署以及扩容

单节点RPM包方式部署1、下载RPM包官网下载地址:Download Elasticsearch | Elastic默认下载的为最新版本,如果想要下载历史版本,点击此处查看历史版本此处安装ES7.X...

MySQL用户权限

MySQL用户权限

1 MySQL 的权限概述mysql中存在4个控制权限的表,分别为user表,db表,tables_priv表,columns_priv表,我当前的版本mysql 5.7.29 。mysql权限表的验...

REPMGR-PG高可用搭建(一)

REPMGR-PG高可用搭建(一)

PG高可用对比数据库复制的术语和定义这些术语和定义应该有助于讨论复制。在与其他Postgres开发人员进行了大量讨论之后,我编译了它们,但是这些定义应该是普遍可用的,并且也应该适用于其他RDBMS。复...

MySQL主从部署(同步+半同步)

一、环境规划1.1服务器规划服务器 IP 版本 配置 Mysql 端口 角色172-16-104-8 172.16.104.8 CentOS release 6.8 (Final) 4c8g 5.7....

MongoDB的MMAPv1存储引擎

 在MongoDB 3.0之前,默认存储引擎为MMAPv1。从MongoDB 4.0开始,MMAPv1存储引擎开始被遗弃。MMAPv1是基于内存映射文件的原始存储引擎。一、journal1、将数据写入...

oracle压测

一、oracle自带压测存储过程: link:https://blog.csdn.net/xiaofan23z/article/details/79789981、首先确定通过运行以下查询,确保为数据文...

发表评论    

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