首页 > 首页 > 数据库 > 非关系型数据库 > Redis > [原创] Redis 各版本命令大全
2025
05-26

[原创] Redis 各版本命令大全

一、通用命令

二、Redis 3.x 版本

三、Redis 4.x 版本

四、Redis 5.x 版本

redis-cli --cluster命令

Redis Cluster 在5.0之后取消了ruby脚本 redis-trib.rb的支持(手动命令行添加集群的方式不变),集合到redis-cli里,避免了再安装ruby的相关环境。直接使用redis-clit的参数--cluster 来取代

一级参数二级参数参数含义
createhost1:port1 ... hostN:portN创建集群
--cluster-replicas <arg>从节点个数
checkhost:port检查集群
--cluster-search-multiple-owners检查是否有槽同时被分配给了多个节点
infohost:port查看集群状态
fixhost:port修复集群
--cluster-search-multiple-owners 修复槽的重复分配问题
reshardhost:port指定集群的任意一节点进行迁移slot,重新分slots
--cluster-from <arg> 需要从哪些源节点上迁移slot,可从多个源节点完成迁移,以逗号隔开,传递的是节点的node id,还可以直接传递--from all,这样源节点就是集群的所有节点,不传递该参数的话,则会在迁移过程中提示用户输入
--cluster-to <arg> slot需要迁移的目的节点的node id,目的节点只能填写一个,不传递该参数的话,则会在迁移过程中提示用户输入
--cluster-slots <arg>需要迁移的slot数量,不传递该参数的话,则会在迁移过程中提示用户输入
--cluster-yes 指定迁移时的确认输入
--cluster-timeout <arg>设置migrate命令的超时时间
--cluster-pipeline <arg>定义cluster getkeysinslot命令一次取出的key数量,不传的话使用默认值为10
--cluster-replace是否直接replace到目标节点,如果在迁移过程中遇到目标已存在相同的键,Redis将覆盖这些键而不是中断操作‌
rebalancehost:port指定集群的任意一节点进行平衡集群节点slot数量 
--cluster-weight <node1=w1...nodeN=wN> 指定集群节点的权重
--cluster-use-empty-masters设置可以让没有分配slot的主节点参与,默认不允许
--cluster-timeout <arg>设置migrate命令的超时时间
--cluster-simulate模拟rebalance操作,不会真正执行迁移操作
--cluster-pipeline <arg>定义cluster getkeysinslot命令一次取出的key数量,默认值为10
--cluster-threshold <arg> 迁移的slot阈值超过threshold,执行rebalance操作
--cluster-replace是否直接replace到目标节点,如果在迁移过程中遇到目标已存在相同的键,Redis将覆盖这些键而不是中断操作‌
add-nodenew_host:new_port existing_host:existing_port添加节点,把新节点加入到指定的集群,默认添加主节点
--cluster-slave新节点作为从节点,默认随机一个主节点
--cluster-master-id给新节点指定主节点
del-nodehost:port node_id删除给定的一个节点,成功后关闭该节点服务
callhost:port command arg arg .. arg在集群的所有节点执行相关命令
set-timeouthost:port milliseconds设置cluster-node-timeout
importhost:port将外部redis数据导入集群
--cluster-from <arg>将指定实例的数据导入到集群
--cluster-copy #migrate时指定copy
--cluster-replacemigrate时指定replace

1、创建集群(只添加主节点)

redis-cli --cluster create 192.168.163.132:6379 192.168.163.132:6380 192.168.163.132:6381

2、创建集群(自动指定主从节点对应关系)

redis-cli --cluster create 192.168.163.132:6379 192.168.163.132:6380 192.168.163.132:6381 192.168.163.132:6382 192.168.163.132:6383 192.168.163.132:6384 --cluster-replicas 1

说明:--cluster-replicas 参数为数字,1表示每个主节点需要1个从节点。

通过该方式创建的带有从节点的机器不能够自己手动指定主节点,所以如果需要指定的话,需要自己手动指定

3、创建集群(手动指定主从节点对应关系)

3.1、先添加集群主节点

redis-cli --cluster add-node 192.168.163.132:6382 192.168.163.132:6379
说明:为一个指定集群添加节点,需要先连到该集群的任意一个节点IP(192.168.163.132:6379),再把新节点加入。该2个参数的顺序有要求:新加入的节点放前

3.2、添加指定主节点的从节点

redis-cli --cluster add-node 192.168.163.132:6382 192.168.163.132:6379 --cluster-slave --cluster-master-id 117457eab5071954faab5e81c3170600d5192270
说明:把6382节点加入到6379节点的集群中,并且当做node_id为 117457eab5071954faab5e81c3170600d5192270 的从节点。如果不指定 --cluster-master-id 会随机分配到任意一个主节点。

4、删除节点

redis-cli --cluster del-node 192.168.163.132:6384 f6a6957421b80409106cb36be3c7ba41f3b603ff

说明:指定IP、端口和node_id 来删除一个节点,从节点可以直接删除,有slot分配的主节点不能直接删除。删除之后,该节点会被shutdown。(但是如果配置文件中把shutdown 命令改成其他字符串,则不会关闭节点)

注意:当被删除掉的节点重新起来之后不能自动加入集群,但其和主的复制还是正常的,也可以通过该节点看到集群信息(通过其他正常节点已经看不到该被del-node节点的信息)。

如果想要再次加入集群,则需要先在该节点执行cluster reset,再用add-node进行添加,进行增量同步复制。

5、检查集群

redis-cli --cluster check 192.168.163.132:6384 --cluster-search-multiple-owners

说明:任意连接一个集群节点,进行集群状态检查

6、集群信息查看

redis-cli --cluster info 192.168.163.132:6384

说明:检查key、slots、从节点个数的分配情况

7、修复集群

redis-cli --cluster fix 192.168.163.132:6384 --cluster-search-multiple-owners

说明:修复集群和槽的重复分配问题

8、设置集群的超时时间 

redis-cli --cluster set-timeout 192.168.163.132:6382 10000

说明:连接到集群的任意一节点来设置集群的超时时间参数cluster-node-timeout

9、集群中执行相关命令

redis-cli --cluster call 192.168.163.132:6381 config set requirepass cc

redis-cli -a cc --cluster call 192.168.163.132:6381 config set masterauth cc

redis-cli -a cc --cluster call 192.168.163.132:6381 config rewrite

说明:连接到集群的任意一节点来对整个集群的所有节点进行设置。

10、在线迁移slot

在线把集群的一些slot从集群原来slot节点迁移到新的节点,即可以完成集群的在线横向扩容和缩容。有2种方式进行迁移

10.1、根据提示来进行操作:

直接连接到集群的任意一节点

redis-cli --cluster reshard 192.168.163.132:6379

10.2、根据参数进行操作:

redis-cli -a cc --cluster reshard 192.168.163.132:6379 --cluster-from 117457eab5071954faab5e81c3170600d5192270 --cluster-to 815da8448f5d5a304df0353ca10d8f9b77016b28 --cluster-slots 10 --cluster-yes --cluster-timeout 5000 --cluster-pipeline 10 --cluster-replace

说明:连接到集群的任意一节点来对指定节点指定数量的slot进行迁移到指定的节点。

11、平衡(rebalance)slot 

11.1、平衡集群中各个节点的slot数量

redis-cli --cluster rebalance 192.168.163.132:6379

11.2、根据集群中各个节点设置的权重等平衡slot数量(不执行,只模拟)

redis-cli -a cc --cluster rebalance --cluster-weight 117457eab5071954faab5e81c3170600d5192270=5 815da8448f5d5a304df0353ca10d8f9b77016b28=4 56005b9413cbf225783906307a2631109e753f8f=3 --cluster-simulate 192.168.163.132:6379

12、导入集群

redis-cli --cluster import 192.168.163.132:6379 --cluster-from 192.168.163.132:9021 --cluster-replace

说明:外部Redis实例(9021)导入到集群中的任意一节点

注意:测试下来发现参数--cluster-replace没有用,如果集群中已经包含了某个key,在导入的时候会失败,不会覆盖,只有清空集群key才能导入。

*** Importing 97847 keys from DB 0
Migrating 9223372011174675807 to 192.168.163.132:6381: Source 192.168.163.132:9021 replied with error:
ERR Target instance replied with error: BUSYKEY Target key name already exists

并且发现如果集群设置了密码,也会导入失败,需要设置集群密码为空才能进行导入(call)。通过monitor(9021)的时候发现,在migrate的时候需要密码进行auth认证。 

五、Redis 6.x 版本

6.x 版本新增命令:

1、fix 的子命令

--cluster-fix-with-unreachable-masters

2、call的子命令

--cluster-only-masters、--cluster-only-replicas

3、集群节点备份

redis-cli -a default --cluster backup 10.0.10.64:6379 /tmp/

代码块
# /root/redis-6.0.9/src/redis-cli -a default –cluster backup 10.0.10.64:6379 /tmp/
Warning: Using a password with ‘-a’ or ‘-u’ option on the command line interface may not be safe.
>>> Performing Cluster Check (using node 10.0.10.64:6379)
M: e6dbd3d565f359fcadaf660a327ee4cd065f45af 10.0.10.64:6379
slots:[0-5460] (5461 slots) master
1 additional replica(s)
M: d2ecfb84d4b18ff08ea3a18776dc1279b7f43aef 10.0.10.64:6381
slots:[10923-16383] (5461 slots) master
1 additional replica(s)
S: ed9e37583f10f82c9489166cf7efe8f66bf72b8d 10.0.10.64:7380
slots: (0 slots) slave
replicates fd19eabbe5ea089625f24eb95129613901ea2190
S: ff1b8764328ae69a05b67b4c78c9abe7a1571563 10.0.10.64:7379
slots: (0 slots) slave
replicates e6dbd3d565f359fcadaf660a327ee4cd065f45af
S: 44b018f76757608057ea5194c7a1c41fd5440262 10.0.10.64:7381
slots: (0 slots) slave
replicates d2ecfb84d4b18ff08ea3a18776dc1279b7f43aef
M: fd19eabbe5ea089625f24eb95129613901ea2190 10.0.10.64:6380
slots:[5461-10922] (5462 slots) master
1 additional replica(s)
[OK] All nodes agree about slots configuration.
>>> Check for open slots…
>>> Check slots coverage…
[OK] All 16384 slots covered.
>>> Node 10.0.10.64:6379 -> Saving RDB…
SYNC sent to master, writing 2571005 bytes to ‘/tmp/redis-node-10.0.10.64-6379-e6dbd3d565f359fcadaf660a327ee4cd065f45af.rdb’
Transfer finished with success.
Transfer finished with success.
>>> Node 10.0.10.64:6381 -> Saving RDB…
SYNC sent to master, writing 2561844 bytes to ‘/tmp/redis-node-10.0.10.64-6381-d2ecfb84d4b18ff08ea3a18776dc1279b7f43aef.rdb’
Transfer finished with success.
Transfer finished with success.
>>> Node 10.0.10.64:6380 -> Saving RDB…
SYNC sent to master, writing 2564036 bytes to ‘/tmp/redis-node-10.0.10.64-6380-fd19eabbe5ea089625f24eb95129613901ea2190.rdb’
Transfer finished with success.
Transfer finished with success.
Saving cluster configuration to: /tmp/nodes.json
[OK] Backup created into: /tmp/
最后编辑:
作者:摘星怪
这个作者貌似有点懒,什么都没有留下。

留下一个回复

你的email不会被公开。