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