暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

NoSQL学习笔记--Redis命令之集群命令

张春光的一亩三分地 2018-08-10
2268

Redis命令

Redis数据库命令分为:字符串strings、列表lists、集合sets、散列表hashes、有序集合sortedsets、发布订阅pub/sub、连接connection、server脚本scripting、键keys、hyperloglog、地理空间Geo、事务transaction、集群cluster一共14大类200多种命令。

官方网站:https://redis.io/commands

字符串命令

位图命令

列表命令

集合命令

散列表命令

有序集合命令

发布订阅命令

连接命令

Server操作命令

脚本命令

键命令

Hyperloglog命令

地理空间命令

事务命令

集群命令

Redis数据库设计之初是基于一台服务器的内存进行高速数据处理的,服务器的内存限制了该数据库最大可处理数据量,为了突破这个限制,从Redis3.0开始引入了分布式集群处理技术。

Redis数据库集群功能:

1、单服务器的内存容量有限,在Redis里对应解决的解决方案为数据分片技术。

2、单服务器的单点故障解决方案为主从复制技术,哨兵技术。

3、单服务器超负荷访问问题的解决方案是分布式读写分离技术。

Redis集群分布式处理示意图:

 

集群命令相关术语

hash slots:哈希插槽,通过哈希算法,用来解决Redis分布式数据存储指定的问题(Redis数据分片)。Redis为集群提供了16384个哈希插槽。

nodes:节点,这里指服务器上安装的一个Redis数据库系统,Redis允许在一台服务器上安装多个数据库系统。具体表现为:IP:PORT。生产环境是一台服务器建议安装一个Redis数据库系统。

gossip:Redis节点间的通信协议。Redis为集群操作的消息通信单独开辟了一个tcp通道,交换二进制信息。

ping/pong:Redis集群的心跳,每个节点每秒随机ping几个节点。节点的选择方法是超过cluster-node-timeout(节点互联超时参数)一半的时间还未收到pong的节点。

meet/pong:只有meet后的受信节点才能加入到上面的ping/pong通信中。

集群相关的操作命令:

序号

命令名称

命令功能描述

执行时间复杂度

1

cluster info

获取Redis集群相关所有命令信息


2

cluster meet

实现集群节点之间的通信


3

cluster replicate

master节点改为slave节点


4

cluster nodes

列出当前集群的所有节点信息


5

cluster forget

移除指定节点


6

cluster reset

重新设置集群节点


7

cluster saveconfig

将节点配置信息保存到磁盘


8

cluster set-config-epoch

为新节点设置特定的新的配置时间标志


9

cluster slaves

提供为指定主节点相关的从节点信息列表


10

cluster count-failure-reports

返回指定节点的故障报告数


11

cluster failover

手动从节点强制启动为主节点


12

readonly

在集群中的从节点开启只读模式


13

readwrite

禁止读取请求跳转到集群的从节点上


14

cluster addslots

hash插槽分配给接受命令的服务器节点


15

cluster setslot

设置指定节点的插槽信息


16

cluster getkeysinslot

返回连接节点指定hash  slot里的key


17

cluster delslots

删除当前节点的指定插槽


18

cluster slots

返回与插槽相关的节点信息


19

cluster keyslot

计算key应该放在哪个插槽上


20

cluster countkeysinslot

返回当前节点指定插槽中键的数量


 

 

cluster info命令

语法:cluster info

参数说明:无

返回值:命令信息

实例:

127.0.0.1:8001> cluster info

cluster_state:ok

cluster_slots_assigned:16384

cluster_slots_ok:16384

cluster_slots_pfail:0

cluster_slots_fail:0

cluster_known_nodes:6

cluster_size:3

cluster_current_epoch:6

cluster_my_epoch:1

cluster_stats_messages_ping_sent:148217

cluster_stats_messages_pong_sent:150810

cluster_stats_messages_sent:299027

cluster_stats_messages_ping_received:150805

cluster_stats_messages_pong_received:148217

cluster_stats_messages_meet_received:5

cluster_stats_messages_received:299027

 

cluster meet命令

语法:clustermeet ip port

参数说明:ip为目标服务器地址,port为端口号

返回值成功返回ok否则返回错误。

实例

127.0.0.1:8001> CLUSTER MEET 127.0.0.1 8011

OK

 

cluster replicate命令

语法:clusterreplicate node-id

参数说明:node-id为需要修改节点角色的节点

返回值:成功返回ok;否则返回错误

实例:

127.0.0.1:8001> CLUSTER REPLICATE 9bcd3d9052c8dfe5eca065a510c9f64850d61f5f

(error) ERR Can't replicate myself

127.0.0.1:8001> CLUSTER REPLICATEe5f727b0f4c42f03ce11b166ba6c5e575c8d72e9

(error) ERR To set a master the node must be empty andwithout assigned slots.

127.0.0.1:8001> CLUSTER REPLICATEe07e8b9361a772e52a86661acc1b5647859f608e

(error) ERR I can only replicate a master, not aslave.

 

cluster nodes命令

语法:clusternodes

参数说明

返回值返回集群配置节点详细信息

实例

127.0.0.1:8001> cluster nodes

f8868f2b93b9a9f9f06307bdd966bb3dfabb127a127.0.0.1:8003@18003 master - 0 1533880643374 7 connected 5461-5960 10923-16383

92d520e62bdd67b621e12619e494dd0795b5ccfe127.0.0.1:8011@18011 slave f8868f2b93b9a9f9f06307bdd966bb3dfabb127a 01533880645391 7 connected

e07e8b9361a772e52a86661acc1b5647859f608e127.0.0.1:8013@18013 slave 9bcd3d9052c8dfe5eca065a510c9f64850d61f5f 01533880644382 8 connected

35a7eb6c7bfdfc902372fb35097bbf3d1b4674cc127.0.0.1:8012@18012 slave 9bcd3d9052c8dfe5eca065a510c9f64850d61f5f 0 15338806430008 connected

e5f727b0f4c42f03ce11b166ba6c5e575c8d72e9127.0.0.1:8002@18002 master - 0 1533880644000 2 connected

9bcd3d9052c8dfe5eca065a510c9f64850d61f5f127.0.0.1:8001@18001 myself,master - 0 1533880643000 8 connected 6-54585963-10920

 

cluster forget命令

语法:clusterforget node-id

参数说明:node-id需要移除的节点id

返回值:成功ok;否则错误。

实例:

127.0.0.1:8001> cluster nodes

f8868f2b93b9a9f9f06307bdd966bb3dfabb127a127.0.0.1:8003@18003 master - 0 1533880643374 7 connected 5461-5960 10923-16383

92d520e62bdd67b621e12619e494dd0795b5ccfe127.0.0.1:8011@18011 slave f8868f2b93b9a9f9f06307bdd966bb3dfabb127a 01533880645391 7 connected

e07e8b9361a772e52a86661acc1b5647859f608e127.0.0.1:8013@18013 slave 9bcd3d9052c8dfe5eca065a510c9f64850d61f5f 01533880644382 8 connected

35a7eb6c7bfdfc902372fb35097bbf3d1b4674cc127.0.0.1:8012@18012 slave 9bcd3d9052c8dfe5eca065a510c9f64850d61f5f 01533880643000 8 connected

e5f727b0f4c42f03ce11b166ba6c5e575c8d72e9127.0.0.1:8002@18002 master - 0 1533880644000 2 connected

9bcd3d9052c8dfe5eca065a510c9f64850d61f5f127.0.0.1:8001@18001 myself,master - 0 1533880643000 8 connected 6-54585963-10920

 

127.0.0.1:8001> cluster forget35a7eb6c7bfdfc902372fb35097bbf3d1b4674cc

OK

127.0.0.1:8001> cluster nodes

f8868f2b93b9a9f9f06307bdd966bb3dfabb127a127.0.0.1:8003@18003 master - 0 1533880809158 7 connected 5461-5960 10923-16383

92d520e62bdd67b621e12619e494dd0795b5ccfe127.0.0.1:8011@18011 slave f8868f2b93b9a9f9f06307bdd966bb3dfabb127a 01533880810183 7 connected

e07e8b9361a772e52a86661acc1b5647859f608e127.0.0.1:8013@18013 slave 9bcd3d9052c8dfe5eca065a510c9f64850d61f5f 01533880808148 8 connected

e5f727b0f4c42f03ce11b166ba6c5e575c8d72e9127.0.0.1:8002@18002 master - 0 1533880808000 2 connected

9bcd3d9052c8dfe5eca065a510c9f64850d61f5f127.0.0.1:8001@18001 myself,master - 0 1533880809000 8 connected 6-54585963-10920

 

cluster reset命令

语法:clusterreset [hard|soft]

参数说明:hard为强制默认为soft

返回值成功ok否则错误

实例

127.0.0.1:8001> CLUSTER RESET soft

(error) ERR CLUSTER RESET can't be called with masternodes containing keys

//有数据的情况下该命令不起作用。

 

cluster saveconfig命令

语法:clustersaveconfig

参数说明

返回值成功ok否则错误。

实例

127.0.0.1:8001> CLUSTER SAVECONFIG

OK

 

cluster set-config-epoch命令

语法:clusterset-config-epoch config-epoch

参数说明:config-epoch为当前节点指定的最新配置时间标志整数),不同节点要求唯一。

返回值:成功ok;否则返回错误。

实例:

 

 

cluster slaves命令

语法:cluster slaves node-id

参数说明:node-id为指定主节点ID号

返回值:执行成功,返回指定主节点的从节点列表信息;否则返回错误。

实例:

(error) ERR The user can assign a config epochonly when the node does not know any other node.

127.0.0.1:8001> cluster slavesf8868f2b93b9a9f9f06307bdd966bb3dfabb127a

1) "92d520e62bdd67b621e12619e494dd0795b5ccfe127.0.0.1:8011@18011 slave f8868f2b93b9a9f9f06307bdd966bb3dfabb127a 01533881378000 7 connected"

 

cluster count-failure-reports命令

语法:clustercount-failure-reports node-id

参数说明:node-id为指定节点的id

返回值:返回指定节点的故障报告数

实例:

127.0.0.1:8001> cluster count-failure-reports9bcd3d9052c8dfe5eca065a510c9f64850d61f5f

(integer) 0

 

cluster failover命令

语法:cluster failover [force|takeover]

参数说明:force如果被使用,从节点不会和对应的主节点执行任何握手,可能导致从节点无法访问对应的主节点。takeover,实现从节点故障转移操作时,不与其他节点进行联系,该方式慎用。

返回值:成功ok;否则错误。

实例:

>>> Performing Cluster Check (using node127.0.0.1:8001)

M: 9bcd3d9052c8dfe5eca065a510c9f64850d61f5f127.0.0.1:8001

  slots:6-5458,5963-10920 (10411 slots) master

   2 additional replica(s)

M: f8868f2b93b9a9f9f06307bdd966bb3dfabb127a127.0.0.1:8003

  slots:5461-5960,10923-16383 (5961 slots) master

   1 additionalreplica(s)

S: 92d520e62bdd67b621e12619e494dd0795b5ccfe127.0.0.1:8011

   slots: (0slots) slave

   replicatesf8868f2b93b9a9f9f06307bdd966bb3dfabb127a

S: 35a7eb6c7bfdfc902372fb35097bbf3d1b4674cc127.0.0.1:8012

   slots: (0slots) slave

   replicates 9bcd3d9052c8dfe5eca065a510c9f64850d61f5f

S: e07e8b9361a772e52a86661acc1b5647859f608e127.0.0.1:8013

   slots: (0slots) slave

   replicates9bcd3d9052c8dfe5eca065a510c9f64850d61f5f

M: e5f727b0f4c42f03ce11b166ba6c5e575c8d72e9127.0.0.1:8002

   slots: (0slots) master

   0 additionalreplica(s)

 

127.0.0.1:8012> cluster failover

OK

 

>>> Performing Cluster Check (using node127.0.0.1:8001)

S: 9bcd3d9052c8dfe5eca065a510c9f64850d61f5f127.0.0.1:8001

   slots: (0slots) slave

   replicates35a7eb6c7bfdfc902372fb35097bbf3d1b4674cc

M: f8868f2b93b9a9f9f06307bdd966bb3dfabb127a127.0.0.1:8003

  slots:5461-5960,10923-16383 (5961 slots) master

   1 additionalreplica(s)

S: 92d520e62bdd67b621e12619e494dd0795b5ccfe127.0.0.1:8011

   slots: (0slots) slave

   replicatesf8868f2b93b9a9f9f06307bdd966bb3dfabb127a

M: 35a7eb6c7bfdfc902372fb35097bbf3d1b4674cc127.0.0.1:8012

  slots:0-5460,5961-10922 (10423 slots) master

   2 additionalreplica(s)

S: e07e8b9361a772e52a86661acc1b5647859f608e 127.0.0.1:8013

   slots: (0slots) slave

   replicates35a7eb6c7bfdfc902372fb35097bbf3d1b4674cc

M: e5f727b0f4c42f03ce11b166ba6c5e575c8d72e9127.0.0.1:8002

   slots: (0slots) master

   0 additionalreplica(s)

[OK] All nodes agree about slots configuration.

 

readonly命令

语法:readonly

参数说明

返回值成功返回ok否则返回错误。

实例

127.0.0.1:8012> READONLY

OK

 

readwrite命令

语法:readwrite

参数说明

返回值成功返回ok否则返回错误。

实例

127.0.0.1:8012> READWRITE

OK

 

cluster addslots命令

语法:CLUSTER ADDSLOTS SLOT [slot...]

参数说明:slot为需要新增加的插槽序号

返回值:成功返回ok;否则错误。

实例:

127.0.0.1:8001> CLUSTER ADDSLOTS  12

(error) ERR Slot 12 is already busy

//插槽号已经被使用的,命令拒绝执行

 

cluster setslot命令

语法:cluster setslot slotMIGRATING|IMPORTING|STABLE|NODE [node-id]

参数说明:slot为指定的插槽序列号。node-id为指定目标节点号。

MIGRATING subcommand: Set a hash slot in migratingstate.

IMPORTING subcommand: Set a hash slot in importingstate.

STABLE subcommand: Clear any importing / migratingstate from hash slot.

NODE subcommand: Bind the hash slot to a differentnode.

返回值:取消成功返回ok;否则错误。

实例:

127.0.0.1:8001> CLUSTER SETSLOT 1 MIGRATING9bcd3d9052c8dfe5eca065a510c9f64850d61f5f

(error) ERR Please use SETSLOT only with masters.

127.0.0.1:8001>

[root@redisclu ~]# redis-cli -c -p 8012

127.0.0.1:8012> CLUSTER SETSLOT 1 MIGRATING9bcd3d9052c8dfe5eca065a510c9f64850d61f5f

OK

 

 

127.0.0.1:8012> CLUSTER SETSLOT 1 IMPORTING9bcd3d9052c8dfe5eca065a510c9f64850d61f5f

(error) ERR I'm already the owner of hash slot 1

127.0.0.1:8012>

[root@redisclu ~]# redis-cli -c -p 8003

127.0.0.1:8003> CLUSTER SETSLOT 1 IMPORTING9bcd3d9052c8dfe5eca065a510c9f64850d61f5f

OK

//MIGRATING是移出插槽,IMPORTING是移入插槽

 

cluster getkeysinslot命令

语法:clustergetkeysinslot slot count

参数说明:slot为当前主节点的指定插槽序号,count为将要返回的插槽里的key对象的列表。

返回值:将要返回的插槽里的key对象的列表;否则返回空列表

实例:

127.0.0.1:8003> CLUSTER GETKEYSINSLOT 1 2

(empty list or set)

127.0.0.1:8003> CLUSTER GETKEYSINSLOT 100 10000

(empty list or set)

127.0.0.1:8003> CLUSTER GETKEYSINSLOT 0 1000

(empty list or set)

 

cluster delslots命令

语法:cluster delslots slot [slot]

参数说明:slot为当前节点上指定的插槽序列号,允许多值指定。

返回值:成功返回ok;否则返回错误。

实例:

127.0.0.1:8003> CLUSTER DELSLOTS 2 3

OK

 

cluster slots命令

语法:cluster slots

参数说明:无

返回值:执行成功,返回带ip/port映射的插槽范围列表

实例:

127.0.0.1:8003> cluster slots

1) 1) (integer) 0

   2)(integer) 5460

   3) 1)"127.0.0.1"

      2)(integer) 8012

      3)"35a7eb6c7bfdfc902372fb35097bbf3d1b4674cc"

   4) 1)"127.0.0.1"

      2)(integer) 8013

      3)"e07e8b9361a772e52a86661acc1b5647859f608e"

   5) 1) "127.0.0.1"

      2)(integer) 8001

      3)"9bcd3d9052c8dfe5eca065a510c9f64850d61f5f"

2) 1) (integer) 5961

   2) (integer)10922

   3) 1)"127.0.0.1"

      2)(integer) 8012

      3)"35a7eb6c7bfdfc902372fb35097bbf3d1b4674cc"

   4) 1)"127.0.0.1"

      2)(integer) 8013

      3)"e07e8b9361a772e52a86661acc1b5647859f608e"

   5) 1)"127.0.0.1"

      2)(integer) 8001

      3)"9bcd3d9052c8dfe5eca065a510c9f64850d61f5f"

3) 1) (integer) 5461

   2) (integer)5960

   3) 1)"127.0.0.1"

      2)(integer) 8003

      3)"f8868f2b93b9a9f9f06307bdd966bb3dfabb127a"

   4) 1)"127.0.0.1"

      2)(integer) 8011

      3)"92d520e62bdd67b621e12619e494dd0795b5ccfe"

4) 1) (integer) 10923

   2) (integer)16383

   3) 1)"127.0.0.1"

      2)(integer) 8003

      3)"f8868f2b93b9a9f9f06307bdd966bb3dfabb127a"

   4) 1)"127.0.0.1"

      2)(integer) 8011

      3)"92d520e62bdd67b621e12619e494dd0795b5ccfe"

 

 

cluster keyslot命令

语法:clusterkeyslot key

参数说明:key为指定的Redis数据对象名在当前节点必须存在。

返回值:返回指定key产生的hash插槽序列号,生产环境不建议使用。

实例:

127.0.0.1:8012> set set1 "HelloRedis!"

OK

127.0.0.1:8012> get set1

"Hello Redis!"

127.0.0.1:8012> CLUSTER KEYSLOT set1

(integer) 3037

 

cluster countkeysinslot命令

语法:cluster countkeysinslot slot

参数说明:slot为当前节点上指定的插槽序列号。

返回值:返回指定插槽下的keys数量;如果插槽序列号不合法,返回错误。

实例:

127.0.0.1:8012> CLUSTER COUNTKEYSINSLOT 1

(integer) 0

127.0.0.1:8012> CLUSTER COUNTKEYSINSLOT 3037

(integer) 1

 


文章转载自张春光的一亩三分地,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论