

一:基础命令
1.启动
redis-server /redis/6389/conf/redis.confredis-sentinel /redis/7389/conf/sentinel.conf2.关闭
redis-cli -p 端口 -a 密码 shutdown save3.连接
redis-cli -p 端口 -a 密码或者redis-cli -p 端口auth 密码退出exit 或 quit 分片集群连接
redis-cli -p 端口 -a 密码 -c4.测试连接存活
redis-cli -p 端口 -a 密码 ping正常返回PONG5.同步执行 RDB 持久化(阻塞主线程),慎用!
save示例如下:
127.0.0.1:6389> saveOK6.异步执行 RDB 持久化(fork 子进程)
bgsave示例如下:
127.0.0.1:6389> bgsaveBackground saving started7.返回上次成功执行 RDB 持久化的 Unix 时间戳
lastsave示例如下:
127.0.0.1:6389> lastsave(integer) 1775706978127.0.0.1:6389> bgsaveBackground saving started127.0.0.1:6389> lastsave(integer) 1775706992127.0.0.1:6389> saveOK127.0.0.1:6389> lastsave(integer) 17757080068.将当前实例设置为指定主节点的从节点
slaveof <masterip> <masterport>replicaof <masterip> <masterport>9.返回当前实例的角色(master/slave/sentinel)
role示例如下:master角色:
127.0.0.1:6389> role1) "master"2) (integer) 60226666593) 1) 1) "192.0.5.30" 2) "6389" 3) "6022666371" 2) 1) "192.0.6.221" 2) "6389" 3) "6022666371"slave角色:
127.0.0.1:6389> role1) "slave"2) "192.0.6.17"3) (integer) 63894) "connected"5) (integer) 6022666226sentinel角色:
127.0.0.1:7389> role1) "sentinel"2) 1) "mymaster"二:哨兵(Sentinel)运维命令
10.列出所有被监视的主服务器及其状态
sentinel masters示例如下:
127.0.0.1:7389> sentinel masters1) 1) "name" 2) "mymaster" 3) "ip" 4) "192.0.6.17" 5) "port" 6) "6389" 7) "runid"...... 40) "1"11.列出指定主服务器的所有从服务器及其状态
sentinel slaves <master-name>示例如下:
127.0.0.1:7389> sentinel slaves mymaster1) 1) "name" 2) "192.0.5.30:6389" 3) "ip" 4) "192.0.5.30" 5) "port" 6) "6389" 7) "runid"...... 41) "replica-announced" 42) "1"2) 1) "name" 2) "192.0.6.221:6389" 3) "ip" 4) "192.0.6.221" 5) "port" 6) "6389" 7) "runid"...... 41) "replica-announced" 42) "1"12.列出监视同一主服务器的其他哨兵节点
sentinel sentinels <master-name>示例如下:
127.0.0.1:7389> sentinel sentinels mymaster1) 1) "name"...... 27) "voted-leader-epoch" 28) "24"2) 1) "name"...... 27) "voted-leader-epoch" 28) "24"13.返回主服务器的 IP 和端口
sentinel get-master-addr-by-name <master-name>示例如下:
127.0.0.1:7389> sentinel get-master-addr-by-name mymaster1) "192.0.6.17"2) "6389"14.重置与模式匹配的主服务器状态
sentinel reset <pattern>适用于清理"幽灵"节点:当某slave永久下线或IP变更后,哨兵内存中可能仍记录旧信息,可以使用这个命令进行清理。或者中止或清理卡住的故障转移。示例如下:
127.0.0.1:7389> sentinel reset mymaster(integer) 1ls -lrth /redis/7389/conf/sentinel.conf-rw-r----- 1 redis redis 849 Apr 9 12:18 /redis/7389/conf/sentinel.conf15.强制对主服务器执行故障转移
sentinel failover <master-name> 示例如下:
127.0.0.1:7389> info Sentinel# Sentinel......master0:name=mymaster,status=ok,address=192.0.6.17:6389,slaves=2,sentinels=3127.0.0.1:7389> sentinel failover mymasterOK127.0.0.1:7389> info Sentinel# Sentinel......master0:name=mymaster,status=ok,address=192.0.6.221:6389,slaves=2,sentinels=3当前连接会断开一下
127.0.0.1:6389> infoError: Server closed the connection127.0.0.1:6389> info# Server16.检查哨兵配置是否能达到故障转移所需的仲裁数量
sentinel ckquorum <master-name> 示例如下:
127.0.0.1:7389> sentinel ckquorum mymasterOK 3 usable Sentinels. Quorum and failover authorization can be reached17.强制将当前哨兵配置写入磁盘
sentinel flushconfig 示例如下:
127.0.0.1:7389> sentinel flushconfigOKls -lrth /redis/7389/conf/sentinel.conf-rw-r----- 1 redis redis 849 Apr 9 12:20 /redis/7389/conf/sentinel.conf三:分片集群(Cluster)运维命令
18.打印集群的整体信息
cluster info示例如下:
127.0.0.1:8001> cluster infocluster_state:okcluster_slots_assigned:16384cluster_slots_ok:16384cluster_slots_pfail:0cluster_slots_fail:0cluster_known_nodes:6cluster_size:3cluster_current_epoch:18cluster_my_epoch:14cluster_stats_messages_ping_sent:41cluster_stats_messages_pong_sent:45cluster_stats_messages_sent:86cluster_stats_messages_ping_received:45cluster_stats_messages_pong_received:41cluster_stats_messages_received:8619.列出集群中所有节点及其状态
cluster nodes示例如下:
127.0.0.1:8001> cluster nodesaaaa2673657d1792cac9974b9ed3264069eafda6 192.0.6.73:8001@18001 myself,master - 0 1775708735000 14 connected 11102-16383bbbb5695e6fbd92fac2f73d45bafcdd534b4dd4f 192.0.6.73:8006@18006 slave cccc3b110d71ae99dbe9a02d7b9a846243cce7c9 0 1775708738352 15 connectedcccc3b110d71ae99dbe9a02d7b9a846243cce7c9 192.0.6.73:8003@18003 master - 0 1775708736348 15 connected 0-5460ddddd24587a614e10fe11135a969bf0a4de974fd 192.0.6.73:8004@18004 master - 0 1775708737000 17 connected 5461-11101eeeeb196a70c18fe0d3b21f72eebb6dccc222229 192.0.6.73:8005@18005 slave ddddd24587a614e10fe11135a969bf0a4de974fd 0 1775708736000 17 connectedffff0afb15596524a6e1ccb21fc1244c03e52f33 192.0.6.73:8002@18002 slave aaaa2673657d1792cac9974b9ed3264069eafda6 0 1775708737350 14 connected20.检查集群
redis-cli --cluster check 192.0.6.73:8001 -a "******"示例如下:
192.0.6.73:8001 (3b442673...) -> 8 keys | 5282 slots | 1 slaves.192.0.6.73:8003 (11263b11...) -> 7 keys | 5461 slots | 1 slaves.192.0.6.73:8004 (e608d245...) -> 9 keys | 5641 slots | 1 slaves.[OK] 24 keys in 3 masters.0.00 keys per slot on average.>>> Performing Cluster Check (using node 192.0.6.73:8001)M: aaaa2673657d1792cac9974b9ed3264069eafda6 192.0.6.73:8001 slots:[11102-16383] (5282 slots) master 1 additional replica(s)S: bbbb5695e6fbd92fac2f73d45bafcdd534b4dd4f 192.0.6.73:8006 slots: (0 slots) slave replicates cccc3b110d71ae99dbe9a02d7b9a846243cce7c9M: cccc3b110d71ae99dbe9a02d7b9a846243cce7c9 192.0.6.73:8003 slots:[0-5460] (5461 slots) master 1 additional replica(s)M: ddddd24587a614e10fe11135a969bf0a4de974fd 192.0.6.73:8004 slots:[5461-11101] (5641 slots) master 1 additional replica(s)S: eeeeb196a70c18fe0d3b21f72eebb6dccc222229 192.0.6.73:8005 slots: (0 slots) slave replicates ddddd24587a614e10fe11135a969bf0a4de974fdS: ffff0afb15596524a6e1ccb21fc1244c03e52f33 192.0.6.73:8002 slots: (0 slots) slave replicates aaaa2673657d1792cac9974b9ed3264069eafda6[OK] All nodes agree about slots configuration.>>> Check for open slots...>>> Check slots coverage...[OK] All 16384 slots covered.21.为新节点分配哈希槽(reshard)
redis-cli --cluster reshard 192.168.1.101:8003 -a "******"示例如下:
#16384/4=4096 16384/3=5463redis-cli --cluster reshard 192.168.1.101:8003 -a "******"[OK] All 16384 slots covered.How many slots do you want to move (from 1 to 16384)? 4096What is the receiving node ID? cccc3b110d71ae99dbe9a02d7b9a846243cce7c9Please enter all the source node IDs. Type 'all' to use all the nodes as source nodes for the hash slots. Type 'done' once you entered all the source nodes IDs.Source node #1: all22.删除节点
redis-cli --cluster del-node 192.168.1.103:8001 7af3a74056926943fe82649659b6e2c46997a8f1 -a "******"23.新增Master节点:
redis-cli --cluster add-node 192.168.1.101:8003 192.168.1.101:8001 -a "******"24.新增Slave节点:
–cluster-slave表示新加入节点是slave节点,cluster-master-id 后面指定从节点属于哪个master节点,接master节点的id即可
redis-cli --cluster add-node 192.168.1.101:8004 192.168.1.101:8003 --cluster-slave --cluster-master-id cccc3b110d71ae99dbe9a02d7b9a846243cce7c9 -a "******"25.迁移slot:
redis-cli --cluster reshard 192.168.1.103:8001 -a "******"26.平衡slot:
redis-cli --cluster rebalance 192.168.1.101:8003 -a "******"27.将指定节点添加到当前集群
cluster meet <ip> <port>28.从集群中移除指定节点
cluster forget <node-id>29.将当前节点设置为指定主节点的从节点
cluster replicate
30.将集群配置保存到节点配置文件中
cluster saveconfig示例如下:
127.0.0.1:8001> cluster saveconfigOK31.将一个或多个槽指派给当前节点
cluster addslots [slot ...]32.移除当前节点上的槽指派
cluster delslots [slot …]
33.移除当前节点的所有槽
cluster flushslots34.将槽指派给指定节点
cluster setslot <slot> node <node-id>35.计算 key 所属的槽位
cluster keyslot <key>示例如下:
127.0.0.1:8001> cluster keyslot a(integer) 15495127.0.0.1:8001> cluster keyslot b(integer) 3300127.0.0.1:8001> cluster keyslot c(integer) 7365127.0.0.1:8001> cluster keyslot 1(integer) 9842127.0.0.1:8001> cluster keyslot 2(integer) 5649127.0.0.1:8001> cluster keyslot 3(integer) 158436.返回槽位中包含的 key 数量
cluster countkeysinslot <slot> 示例如下:
192.0.6.73:8004> cluster countkeysinslot 7365(integer) 137.创建分片集群
Redis 5,Redis 6版本:
redis-cli --cluster create 192.168.1.101:8001 192.168.1.101:8002 192.168.1.102:8001 192.168.1.102:8002 192.168.1.103:8001 192.168.1.103:8002 --cluster-replicas 1 -a "******"Redis 4版本:
redis-trib.rb create --replicas 1 25.2.16.198:8001 192.168.1.101:8002 192.168.1.102:8001 192.168.1.102:8002 192.168.1.103:8001 192.168.1.103:8002四:监控与调试命令
38.实时打印服务器接收到的所有命令(慎用)。
monitor示例如下:
127.0.0.1:8001> monitorOK1775713869.123021 [0 192.0.6.17:51792] "AUTH" "(redacted)"1775713869.123781 [0 192.0.6.17:51792] "COMMAND"1775713877.177297 [0 192.0.6.17:51792] "info"1775713937..6.0 [0 192.0.6.17:51792] "set" "a100" "100"39.查看各命令的耗时统计
info commandstats示例如下:
127.0.0.1:6389> info commandstats# Commandstatscmdstat_pexpire:calls=1,usec=7,usec_per_call=7.00,rejected_calls=0,failed_calls=0cmdstat_keys:calls=14,usec=170,usec_per_call=12.14,rejected_calls=2,failed_calls=0cmdstat_lrem:calls=4,usec=35,usec_per_call=8.75,rejected_calls=0,failed_calls=0cmdstat_zrank:calls=10,usec=65,usec_per_call=6.50,rejected_calls=3,failed_calls=0cmdstat_exists:calls=2,usec=9,usec_per_call=4.50,rejected_calls=0,failed_calls=0cmdstat_bgsave:calls=3,usec=1073,usec_per_call=357.67,rejected_calls=0,failed_calls=0cmdstat_role:calls=2,usec=30,usec_per_call=15.00,rejected_calls=0,failed_calls=0cmdstat_zrevrangebyscore:calls=4,usec=55,usec_per_call=13.75,rejected_calls=1,failed_calls=0cmdstat_hvals:calls=2,usec=24,usec_per_call=12.00,rejected_calls=0,failed_calls=0cmdstat_hmget:calls=1,usec=8,usec_per_call=8.00,rejected_calls=0,failed_calls=0cmdstat_dbsize:calls=2,usec=3,usec_per_call=1.50,rejected_calls=1,failed_calls=0cmdstat_info:calls=1863985,usec=139252647,usec_per_call=74.71,rejected_calls=0,failed_calls=0cmdstat_unlink:calls=2,usec=23,usec_per_call=11.50,rejected_calls=0,failed_calls=0cmdstat_slaveof:calls=2,usec=236,usec_per_call=118.00,rejected_calls=0,failed_calls=0cmdstat_sort:calls=5,usec=70,usec_per_call=14.00,rejected_calls=0,failed_calls=1cmdstat_del:calls=7,usec=71,usec_per_call=10.14,rejected_calls=0,failed_calls=0cmdstat_lindex:calls=18,usec=127,usec_per_call=7.06,rejected_calls=0,failed_calls=0cmdstat_object:calls=2,usec=12,usec_per_call=6.00,rejected_calls=0,failed_calls=0cmdstat_ltrim:calls=1,usec=9,usec_per_call=9.00,rejected_calls=0,failed_calls=0cmdstat_lpop:calls=1,usec=11,usec_per_call=11.00,rejected_calls=0,failed_calls=0cmdstat_hget:calls=8,usec=60,usec_per_call=7.50,rejected_calls=6,failed_calls=0cmdstat_persist:calls=1,usec=14,usec_per_call=14.00,rejected_calls=0,failed_calls=0cmdstat_append:calls=1,usec=5,usec_per_call=5.00,rejected_calls=0,failed_calls=0cmdstat_zrevrank:calls=3,usec=20,usec_per_call=6.67,rejected_calls=0,failed_calls=0cmdstat_dump:calls=1,usec=11,usec_per_call=11.00,rejected_calls=0,failed_calls=0cmdstat_randomkey:calls=8,usec=83,usec_per_call=10.38,rejected_calls=0,failed_calls=0cmdstat_set:calls=30,usec=304,usec_per_call=10.13,rejected_calls=1,failed_calls=0cmdstat_lpush:calls=10,usec=109,usec_per_call=10.90,rejected_calls=0,failed_calls=0cmdstat_type:calls=74,usec=40,usec_per_call=0.54,rejected_calls=0,failed_calls=0cmdstat_sismember:calls=2,usec=10,usec_per_call=5.00,rejected_calls=0,failed_calls=0cmdstat_rpush:calls=11,usec=110,usec_per_call=10.00,rejected_calls=0,failed_calls=0cmdstat_save:calls=3,usec=5666,usec_per_call=1888.67,rejected_calls=0,failed_calls=0cmdstat_setnx:calls=2,usec=15,usec_per_call=7.50,rejected_calls=0,failed_calls=0cmdstat_hkeys:calls=5,usec=36,usec_per_call=7.20,rejected_calls=0,failed_calls=0cmdstat_rpop:calls=1,usec=9,usec_per_call=9.00,rejected_calls=0,failed_calls=0cmdstat_msetnx:calls=2,usec=23,usec_per_call=11.50,rejected_calls=0,failed_calls=0cmdstat_restore:calls=1,usec=10,usec_per_call=10.00,rejected_calls=3,failed_calls=0cmdstat_zrange:calls=9,usec=151,usec_per_call=16.78,rejected_calls=2,failed_calls=2cmdstat_config:calls=70,usec=6441,usec_per_call=92.01,rejected_calls=1,failed_calls=4cmdstat_psync:calls=3,usec=434,usec_per_call=144.67,rejected_calls=0,failed_calls=0cmdstat_zincrby:calls=1,usec=31,usec_per_call=31.00,rejected_calls=1,failed_calls=0cmdstat_sinter:calls=2,usec=21,usec_per_call=10.50,rejected_calls=0,failed_calls=0cmdstat_ttl:calls=13,usec=71,usec_per_call=5.46,rejected_calls=0,failed_calls=0cmdstat_strlen:calls=38,usec=19,usec_per_call=0.50,rejected_calls=0,failed_calls=0cmdstat_zrevrange:calls=1,usec=21,usec_per_call=21.00,rejected_calls=0,failed_calls=0cmdstat_hscan:calls=5,usec=53,usec_per_call=10.60,rejected_calls=1,failed_calls=2cmdstat_hexists:calls=2,usec=10,usec_per_call=5.00,rejected_calls=1,failed_calls=0cmdstat_multi:calls=2,usec=1,usec_per_call=0.50,rejected_calls=0,failed_calls=0cmdstat_expire:calls=1,usec=14,usec_per_call=14.00,rejected_calls=0,failed_calls=0cmdstat_echo:calls=1,usec=2,usec_per_call=2.00,rejected_calls=0,failed_calls=0cmdstat_brpop:calls=1,usec=32,usec_per_call=32.00,rejected_calls=1,failed_calls=0cmdstat_zrem:calls=1,usec=10,usec_per_call=10.00,rejected_calls=0,failed_calls=0cmdstat_zcount:calls=2,usec=24,usec_per_call=12.00,rejected_calls=0,failed_calls=0cmdstat_slowlog:calls=3,usec=11,usec_per_call=3.67,rejected_calls=0,failed_calls=0cmdstat_zscore:calls=3,usec=55,usec_per_call=18.33,rejected_calls=1,failed_calls=0cmdstat_blpop:calls=2,usec=53,usec_per_call=26.50,rejected_calls=0,failed_calls=1cmdstat_scan:calls=17,usec=163,usec_per_call=9.59,rejected_calls=0,failed_calls=5cmdstat_zrangebyscore:calls=3,usec=63,usec_per_call=21.00,rejected_calls=0,failed_calls=0cmdstat_sunion:calls=1,usec=15,usec_per_call=15.00,rejected_calls=0,failed_calls=0cmdstat_incr:calls=2,usec=14,usec_per_call=7.00,rejected_calls=0,failed_calls=0cmdstat_hdel:calls=1,usec=7,usec_per_call=7.00,rejected_calls=0,failed_calls=0cmdstat_exec:calls=2,usec=5814,usec_per_call=2907.00,rejected_calls=0,failed_calls=0cmdstat_zadd:calls=4,usec=111,usec_per_call=27.75,rejected_calls=0,failed_calls=0cmdstat_decr:calls=2,usec=13,usec_per_call=6.50,rejected_calls=0,failed_calls=0cmdstat_zremrangebyscore:calls=1,usec=12,usec_per_call=12.00,rejected_calls=0,failed_calls=0cmdstat_sadd:calls=7,usec=96,usec_per_call=13.71,rejected_calls=0,failed_calls=0cmdstat_renamenx:calls=2,usec=13,usec_per_call=6.50,rejected_calls=0,failed_calls=0cmdstat_srem:calls=2,usec=15,usec_per_call=7.50,rejected_calls=1,failed_calls=0cmdstat_lrange:calls=23,usec=230,usec_per_call=10.00,rejected_calls=0,failed_calls=0cmdstat_spop:calls=1,usec=14,usec_per_call=14.00,rejected_calls=0,failed_calls=0cmdstat_expireat:calls=1,usec=10,usec_per_call=10.00,rejected_calls=0,failed_calls=0cmdstat_pttl:calls=6,usec=34,usec_per_call=5.67,rejected_calls=0,failed_calls=0cmdstat_hmset:calls=2,usec=27,usec_per_call=13.50,rejected_calls=0,failed_calls=1cmdstat_rename:calls=2,usec=24,usec_per_call=12.00,rejected_calls=0,failed_calls=0cmdstat_psetex:calls=1,usec=8,usec_per_call=8.00,rejected_calls=0,failed_calls=0cmdstat_command:calls=40,usec=19591,usec_per_call=489.77,rejected_calls=1,failed_calls=0cmdstat_ping:calls=18024188,usec=26544430,usec_per_call=1.47,rejected_calls=3,failed_calls=0cmdstat_mget:calls=4,usec=32,usec_per_call=8.00,rejected_calls=0,failed_calls=0cmdstat_move:calls=1,usec=6,usec_per_call=6.00,rejected_calls=0,failed_calls=0cmdstat_hlen:calls=9,usec=8,usec_per_call=0.89,rejected_calls=0,failed_calls=0cmdstat_replconf:calls=12415540,usec=21948540,usec_per_call=1.77,rejected_calls=0,failed_calls=0cmdstat_incrby:calls=2,usec=14,usec_per_call=7.00,rejected_calls=0,failed_calls=0cmdstat_rpoplpush:calls=1,usec=13,usec_per_call=13.00,rejected_calls=0,failed_calls=0cmdstat_scard:calls=18,usec=31,usec_per_call=1.72,rejected_calls=0,failed_calls=0cmdstat_srandmember:calls=15,usec=174,usec_per_call=11.60,rejected_calls=0,failed_calls=0cmdstat_publish:calls=9189540,usec=68756785,usec_per_call=7.48,rejected_calls=0,failed_calls=0cmdstat_sdiff:calls=1,usec=17,usec_per_call=17.00,rejected_calls=0,failed_calls=0cmdstat_llen:calls=11,usec=21,usec_per_call=1.91,rejected_calls=0,failed_calls=0cmdstat_subscribe:calls=20,usec=76,usec_per_call=3.80,rejected_calls=0,failed_calls=0cmdstat_client:calls=84,usec=1591,usec_per_call=18.94,rejected_calls=0,failed_calls=0cmdstat_select:calls=8,usec=17,usec_per_call=2.12,rejected_calls=0,failed_calls=0cmdstat_hincrby:calls=2,usec=21,usec_per_call=10.50,rejected_calls=0,failed_calls=0cmdstat_setex:calls=1,usec=11,usec_per_call=11.00,rejected_calls=0,failed_calls=0cmdstat_zcard:calls=5,usec=10,usec_per_call=2.00,rejected_calls=0,failed_calls=0cmdstat_get:calls=47,usec=313,usec_per_call=6.66,rejected_calls=0,failed_calls=1cmdstat_hgetall:calls=1,usec=8,usec_per_call=8.00,rejected_calls=0,failed_calls=0cmdstat_mset:calls=1,usec=10,usec_per_call=10.00,rejected_calls=0,failed_calls=0cmdstat_lastsave:calls=7,usec=13,usec_per_call=1.86,rejected_calls=0,failed_calls=0cmdstat_hset:calls=5,usec=55,usec_per_call=11.00,rejected_calls=3,failed_calls=0cmdstat_auth:calls=406,usec=1699,usec_per_call=4.18,rejected_calls=0,failed_calls=0cmdstat_smembers:calls=7,usec=80,usec_per_call=11.43,rejected_calls=1,failed_calls=040.列出所有客户端连接
client list示例如下:
127.0.0.1:6389> client listid=407 addr=192.0.5.30:64265 laddr=192.0.6.17:6389 fd=9 name=sentinel-ddc86109-cmd age=5939 idle=0 flags=N db=0 sub=0 psub=0 multi=-1 qbuf=0 qbuf-free=0 argv-mem=0 obl=0 oll=0 omem=0 tot-mem=17048 events=r cmd=ping user=default redir=-1id=408 addr=192.0.5.30:54307 laddr=192.0.6.17:6389 fd=10 name=sentinel-ddc86109-pubsub age=5939 idle=1 flags=P db=0 sub=1 psub=0 multi=-1 qbuf=0 qbuf-free=0 argv-mem=0 obl=0 oll=0 omem=0 tot-mem=17048 events=r cmd=subscribe user=default redir=-1id=403 addr=192.0.6.17:33057 laddr=192.0.6.17:6389 fd=12 name=sentinel-e177af92-pubsub age=6213 idle=1 flags=P db=0 sub=1 psub=0 multi=-1 qbuf=0 qbuf-free=0 argv-mem=0 obl=0 oll=0 omem=0 tot-mem=17064 events=r cmd=subscribe user=default redir=-1id=404 addr=192.0.6.221:56799 laddr=192.0.6.17:6389 fd=13 name=sentinel-ca6220c1-cmd age=6213 idle=1 flags=N db=0 sub=0 psub=0 multi=-1 qbuf=0 qbuf-free=0 argv-mem=0 obl=0 oll=0 omem=0 tot-mem=17048 events=r cmd=ping user=default redir=-1id=405 addr=192.0.6.221:48373 laddr=192.0.6.17:6389 fd=15 name=sentinel-ca6220c1-pubsub age=6213 idle=1 flags=P db=0 sub=1 psub=0 multi=-1 qbuf=0 qbuf-free=0 argv-mem=0 obl=0 oll=0 omem=0 tot-mem=17048 events=r cmd=subscribe user=default redir=-1id=413 addr=192.0.6.73:63428 laddr=192.0.6.17:6389 fd=11 name= age=6 idle=6 flags=N db=0 sub=0 psub=0 multi=-1 qbuf=0 qbuf-free=0 argv-mem=0 obl=0 oll=0 omem=0 tot-mem=17048 events=r cmd=command user=default redir=-1id=406 addr=192.0.6.221:6389 laddr=192.0.6.17:36001 fd=14 name= age=6213 idle=1 flags=M db=0 sub=0 psub=0 multi=-1 qbuf=0 qbuf-free=0 argv-mem=0 obl=0 oll=0 omem=0 tot-mem=17048 events=r cmd=publish user=(superuser) redir=-1id=394 addr=192.0.6.17:37859 laddr=192.0.6.17:6389 fd=8 name=sentinel-e177af92-cmd age=6223 idle=1 flags=N db=0 sub=0 psub=0 multi=-1 qbuf=0 qbuf-free=0 argv-mem=0 obl=0 oll=0 omem=0 tot-mem=17048 events=r cmd=ping user=default redir=-1id=414 addr=127.0.0.1:38824 laddr=127.0.0.1:6389 fd=16 name= age=3 idle=0 flags=N db=0 sub=0 psub=0 multi=-1 qbuf=26 qbuf-free=32744 argv-mem=10 obl=0 oll=0 omem=0 tot-mem=49810 events=r cmd=client user=default redir=-141.为当前连接设置名称
client setname <name>示例如下:
192.0.6.17:6389> client setname cjc2026OK可以看到 name=cjc2026
127.0.0.1:6389> client listid=413 addr=192.0.6.73:63428 laddr=192.0.6.17:6389 fd=11 name=cjc2026 age=85 idle=13 flags=N db=0 sub=0 psub=0 multi=-1 qbuf=0 qbuf-free=0 argv-mem=0 obl=0 oll=0 omem=0 tot-mem=17048 events=r cmd=client user=default redir=-142.关闭指定客户端连接
client kill [ip:port] [ID client-id] [TYPE normal|master|slave|pubsub] [USER username] [ADDR ip:port] [LADDR ip:port] [SKIPME yes/no]示例如下:
127.0.0.1:6389> client kill 192.0.6.73:63428OK远程连接中断
192.0.6.17:6389> infoError: Server closed the connection43.模拟服务器延迟,用于测试(调试命令)
debug sleep <seconds> 示例如下:
127.0.0.1:6389> debug sleep 10OK(10.00s)44.获取最近 n 条慢查询日志
slowlog get [n]示例如下:
127.0.0.1:6389> slowlog get 21) 1) (integer) 0 2) (integer) 1775714646 3) (integer) 10000088 4) 1) "debug" 2) "sleep" 3) "10" 5) "127.0.0.1:53816" 6) ""45.获取慢查询日志的数量
slowlog len示例如下:
127.0.0.1:6389> slowlog len(integer) 146.分析和报告延迟问题
latency doctor 示例如下:没有开启
127.0.0.1:6389> latency doctorI'm sorry, Dave, I can't do that. Latency monitoring is disabled in this Redis instance. You may use "CONFIG SET latency-monitor-threshold <milliseconds>." in order to enable it. If we weren't in a deep space mission I'd suggest to take a look at https://redis.io/topics/latency-monitor.47.清空慢查询日志
slowlog reset示例如下:
127.0.0.1:6389> slowlog resetOK127.0.0.1:6389> slowlog len(integer) 0五:配置管理命令
48.获取指定配置参数的值,CONFIG GET * 查看所有
config get <parameter>示例如下:
192.0.6.73:8004> config get dir1) "dir"2) "/redis/8004/data"192.0.6.73:8004> config get * 1) "rdbchecksum" 2) "yes"......295) "oom-score-adj-values"296) "0 200 800"49.动态修改配置参数(重启后失效)
config set <parameter> <value> 示例如下:
192.0.6.73:8004> config get slowlog-max-len1) "slowlog-max-len"2) "128"192.0.6.73:8004> config set slowlog-max-len 256OK192.0.6.73:8004> config get slowlog-max-len1) "slowlog-max-len"2) "256"50.将当前配置持久化到 redis.conf 文件
config rewrite示例如下:
127.0.0.1:8001> config get slowlog-max-len1) "slowlog-max-len"2) "128"127.0.0.1:8001> config set slowlog-max-len 256OK127.0.0.1:8001> config get slowlog-max-len1) "slowlog-max-len"2) "256"cat /redis/8001/conf/redis.conf |grep slowlog-max-lenslowlog-max-len 128127.0.0.1:8001> config rewriteOKcat /redis/8001/conf/redis.conf |grep slowlog-max-lenslowlog-max-len 25651.重置 INFO 命令中的统计信息
config resetstat 示例如下:
127.0.0.1:8001> config resetstatOK52.扫描并找出大 key
redis-cli --bigkeys 示例如下:
redis-cli -p 6389 -a "flzx3Qc!" --bigkeys# Scanning the entire keyspace to find biggest keys as well as# average sizes per key type. You can use -i 0.1 to sleep 0.1 sec# per 100 SCAN commands (not usually needed).[00.00%] Biggest zset found so far '"rank:global"' with 4 members[00.00%] Biggest string found so far '"cjc"' with 2 bytes[00.00%] Biggest set found so far '"article:001:tags"' with 5 members[00.00%] Biggest list found so far '"user:1001:timeline"' with 3 items[00.00%] Biggest string found so far '"b"' with 3 bytes[28.57%] Biggest hash found so far '"cjc09"' with 1 fields[28.57%] Biggest hash found so far '"user:1002"' with 4 fields[57.14%] Biggest list found so far '"numbers"' with 5 items[57.14%] Biggest string found so far '"cjc08"' with 6 bytes[85.71%] Biggest list found so far '"task_queue"' with 6 items-------- summary -------Sampled 35 keys in the keyspace!Total key length in bytes is 251 (avg len 7.17)Biggest list found '"task_queue"' has 6 itemsBiggest hash found '"user:1002"' has 4 fieldsBiggest string found '"cjc08"' has 6 bytesBiggest set found '"article:001:tags"' has 5 membersBiggest zset found '"rank:global"' has 4 members4 lists with 18 items (11.43% of keys, avg size 4.50)4 hashs with 11 fields (11.43% of keys, avg size 2.75)18 strings with 44 bytes (51.43% of keys, avg size 2.44)0 streams with 0 entries (00.00% of keys, avg size 0.00)7 sets with 19 members (20.00% of keys, avg size 2.71)2 zsets with 7 members (05.71% of keys, avg size 3.50)压测:100个客户端,同时请求redis,一共执行20000次。
53.目标生产库进行压测
redis-benchmark -p 6389 -h 25.19.118.70 -c 100 -n 2000054.500个客户端,同时请求redis,一共执行20000次。
redis-benchmark -p 6389 -h 25.19.118.70 -a yELxh_3qSiXr -c 500 -n 20000 -q六:通用操作
55.切换数据库(指定数据库 0-15,默认 0)
select <db_index>示例如下:
127.0.0.1:6389> select 5OK127.0.0.1:6389[5]>56.删除一个或多个 key
del <key...>示例如下
127.0.0.1:6389> del a(integer) 1127.0.0.1:6389> del b c(integer) 257.非阻塞删除(异步删除)
unlink <key...> 示例如下
127.0.0.1:6389> unlink a(integer) 1不支持多个127.0.0.1:6389> ulink b c(error) ERR unknown command `ulink`, with args beginning with: `b`, `c`,58.判断 key 是否存在
exists <key>示例如下:
127.0.0.1:6389> exists abc(integer) 1127.0.0.1:6389> exists bcd(integer) 059.查看 key 剩余生存时间(秒)
ttl <key>示例如下:
127.0.0.1:6389> set a 123OK127.0.0.1:6389> ttl a(integer) -1127.0.0.1:6389> set b 123 ex 100OK127.0.0.1:6389> ttl b(integer) 9760.查看 key 剩余生存时间(毫秒)
pttl <key> 示例如下
127.0.0.1:6389> pttl b(integer) 8203361.为 key 设置过期时间(秒)
expire <key> <seconds>示例如下:
127.0.0.1:6389> ttl a(integer) -1127.0.0.1:6389> expire a 100(integer) 1127.0.0.1:6389> ttl a(integer) 9762.以毫秒为单位设置过期时间
pexpire <key> <milliseconds>示例如下:
127.0.0.1:6389> pexpire a 100000(integer) 1127.0.0.1:6389> ttl a(integer) 98127.0.0.1:6389> pttl a(integer) 7832963.设置 key 在指定时间戳过期
expireat <key> <timestamp> 示例如下
127.0.0.1:6389> expireat a 78329(integer) 1127.0.0.1:6389> ttl a(integer) -2127.0.0.1:6389> get a(nil)64.移除 key 的过期时间,使其永久有效
persist <key>示例如下
127.0.0.1:6389> set a 123 ex 60OK127.0.0.1:6389> ttl a(integer) 57127.0.0.1:6389> persist a(integer) 1127.0.0.1:6389> ttl a(integer) -165.查看 key 的数据类型
type <key>示例如下
127.0.0.1:6389> type astring66.查看 key 的内部编码格式
object encoding <key>示例如下
127.0.0.1:6389> object encoding a"int"127.0.0.1:6389> get a"123"127.0.0.1:6389> set b 123abcOK127.0.0.1:6389> object encoding b"embstr"67.重命名 key,若新 key 存在则覆盖
rename <oldkey> <newkey>示例如下
127.0.0.1:6389> set a 123OK127.0.0.1:6389> set b 456OK127.0.0.1:6389> rename a bOK127.0.0.1:6389> get b"123"127.0.0.1:6389> get a(nil)68.重命名 key,仅当新 key 不存在时成功
renamenx <oldkey> <newkey>示例如下
127.0.0.1:6389> set a 123OK127.0.0.1:6389> set b 456OK127.0.0.1:6389> renamenx a b(integer) 0127.0.0.1:6389> get b"456"127.0.0.1:6389> get a"123"127.0.0.1:6389> renamenx a c(integer) 1127.0.0.1:6389> get c"123"69.将 key 移动到另一个数据库
move <key> <db_index>示例如下
127.0.0.1:6389> set a 123OK127.0.0.1:6389> move a 5(integer) 1127.0.0.1:6389> get a(nil)127.0.0.1:6389> select 5OK127.0.0.1:6389[5]> get a"123"70.从当前数据库随机返回一个 key
randomkey示例如下
127.0.0.1:6389> randomkey"b"127.0.0.1:6389> randomkey"d"127.0.0.1:6389> randomkey"e"71.查找匹配模式的 key(生产环境慎用)
keys <pattern>示例如下
127.0.0.1:6389> keys a(empty array)127.0.0.1:6389> keys b1) "b"127.0.0.1:6389> get b"456"或者指定"*",查看所有(默认db0),性能差,生产环境勿用
127.0.0.1:6389> keys * 1) "abc" 2) "b" 3) "e" 4) "a02" 5) "g" 6) "d" 7) "a01" 8) "20260127" 9) "h"10) "c"支持通配符
127.0.0.1:6389> keys a*1) "abc"2) "a02"3) "a01"72.迭代遍历 key,安全且支持分页
scan cursor [MATCH pattern] [COUNT count] [TYPE type]避免KEYS 可能引起的长时间阻塞,基于游标(cursor)分批返回结果。关键字说明:cursor:游标,从0开始,返回结果中会包含下一个游标值,当返回0表示迭代结束。MATCH pattern:可选,匹配key的模式(支持,?,[]等通配符)。COUNT count:可选,提示每批返回大约多少个元素(默认10),不是精确限制。
示例如下,key 和 scan 命令做对比:
127.0.0.1:6389> keys * 1) "abc" 2) "b" 3) "e" 4) "a02" 5) "g" 6) "d" 7) "a01" 8) "20260127" 9) "h"10) "c"127.0.0.1:6389> scan 01) "7"2) 1) "b" 2) "abc" 3) "d" 4) "a01" 5) "a02" 6) "c" 7) "g" 8) "e" 9) "20260127" 10) "h"127.0.0.1:6389> scan 0 match a*1) "7"2) 1) "abc" 2) "a01" 3) "a02"127.0.0.1:6389> keys a*1) "abc"2) "a02"3) "a01"73.序列化 key 并返回其值
dump <key>通过 序列化 和 反序列化操作,可以实现对单个key的备份/恢复、迁移等工作。示例如下
127.0.0.1:6389> set a 123OK127.0.0.1:6389> get a"123"127.0.0.1:6389> dump a"\x00\xc0{\t\x00\x98\x10\x02-T\xfc\x04\b"127.0.0.1:6389> 74.反序列化并恢复 key
restore <key> <ttl> <serialized-value>示例如下
127.0.0.1:6389> restore a 0 "\x00\xc0{\t\x00\x98\x10\x02-T\xfc\x04\b"OK127.0.0.1:6389> get a"123"75.对列表、集合或有序集合进行排序
sort <key>示例如下对列表(List)进行数字升序排序
127.0.0.1:6389> LPUSH numbers 5 2 3 6 1(integer) 5127.0.0.1:6389> sort numbers1) "1"2) "2"3) "3"4) "5"5) "6"127.0.0.1:6389> sort numbers desc1) "6"2) "5"3) "3"4) "2"5) "1"七:不同类型 keys 的操作
字符串(String)操作
76.设置字符串值,支持过期时间和存在性判断
set <key> <value> [NX|XX] [EX|PX] 示例如下
127.0.0.1:6389> set cjc 123 ex 10OK77.获取 key 的值
get <key>示例如下
127.0.0.1:6389> get cjc"123"78.批量设置多个字符串值
mset <key> <value> [key value ...]示例如下
127.0.0.1:6389> mset cjc01 1 cjc02 b cjc03 cOK127.0.0.1:6389> keys cjc*1) "cjc03"2) "cjc01"3) "cjc02"79.批量获取多个 key 的值
mget <key...> 示例如下
127.0.0.1:6389> mget cjc01 cjc02 cjc031) "1"2) "b"3) "c"80.设置值并指定过期时间(秒)
setex <key> <seconds> <value>示例如下
127.0.0.1:6389> setex cjc04 100 3OK127.0.0.1:6389> get cjc04"3"127.0.0.1:6389> ttl cjc04(integer) 9281.以毫秒为单位设置值并指定过期时间
psetex <key> <milliseconds> <value>示例如下
127.0.0.1:6389> psetex cjc05 100000 100OK127.0.0.1:6389> get cjc05"100"127.0.0.1:6389> ttl cjc05(integer) 91127.0.0.1:6389> pttl cjc05(integer) 8357682.不存在时设置值
setnx <key> <value> key示例如下
127.0.0.1:6389> setnx cjc05 100(integer) 0127.0.0.1:6389> setnx cjc06 100(integer) 183.原子性地批量设置,仅当所有 key 都不存在时成功
msetnx <key> <value> [key value ...] 示例如下
127.0.0.1:6389> msetnx cjc06 100 cjc07 100 cjc08 100(integer) 0127.0.0.1:6389> msetnx cjc07 100 cjc08 100(integer) 184.整数值自增 1
incr <key>示例如下
127.0.0.1:6389> get cjc(nil)127.0.0.1:6389> get cjc09(nil)127.0.0.1:6389> get cjc08"100"127.0.0.1:6389> incr cjc08(integer) 101127.0.0.1:6389> incr cjc08(integer) 102127.0.0.1:6389> get cjc08"102"85.整数值自减 1
decr <key>示例如下
127.0.0.1:6389> get cjc08"102"127.0.0.1:6389> decr cjc08(integer) 101127.0.0.1:6389> decr cjc08(integer) 100127.0.0.1:6389> get cjc08"100"86.整数值增加指定步长
incrby <key> <increment>示例如下
127.0.0.1:6389> get cjc"50"127.0.0.1:6389> get cjc08"100"127.0.0.1:6389> incrby cjc08 50(integer) 150127.0.0.1:6389> get cjc08"150"87.向字符串末尾追加内容。
append <key> <value>示例如下
127.0.0.1:6389> get cjc08"150"127.0.0.1:6389> append cjc08 cjc(integer) 6127.0.0.1:6389> get cjc08"150cjc"88.获取字符串值的长度
strlen <key>示例如下
127.0.0.1:6389> get cjc07"100"127.0.0.1:6389> get cjc08"150cjc"127.0.0.1:6389> strlen cjc07(integer) 3127.0.0.1:6389> strlen cjc08(integer) 6哈希(Hash)操作
89.设置哈希表中字段的值
hset <key> <field> <value> 示例如下
127.0.0.1:6389> hset cjc09 name cjc(integer) 1用户属性:
127.0.0.1:6389> hset userid:001 name "cjc" age 25 city "BJ"(integer) 3购物车:
127.0.0.1:6389> hset cart:1001 10086 1(integer) 1127.0.0.1:6389> hset cart:1001 10089 2(integer) 1127.0.0.1:6389> hset cart:1001 10090 3(integer) 190.获取哈希表中字段的值
hget <key> <field>示例如下
127.0.0.1:6389> hget userid:001 name"cjc"127.0.0.1:6389> hget userid:001 city"BJ"127.0.0.1:6389> hget cjc09 name"cjc"127.0.0.1:6389> hget cart:1001 10090"3"91.获取哈希表中所有字段和值
hgetall <key>示例如下
127.0.0.1:6389> hgetall userid:0011) "name"2) "cjc"3) "age"4) "25"5) "city"6) "BJ"92.批量设置多个字段值
hmset <key> <field> <value> [field value ...]该命令已经被hset替代,因为hset也支持多字段设置了示例如下
127.0.0.1:6389> hmset user:1002 name "chen" name 25 gender "男" height 180 weight 80 city "上海" OK93.批量获取多个字段的值
hmget <key> <field...>示例如下
127.0.0.1:6389> hmget user:1002 name height1) "25"2) "180"94.获取所有字段名
hkeys <key>示例如下
127.0.0.1:6389> hkeys user:10021) "name"2) "gender"3) "height"4) "weight"5) "city"95.获取所有字段值
hvals <key>示例如下:
127.0.0.1:6389> hvals user:10021) "25"2) "\xe7\x94\xb7"3) "180"4) "80"5) "\xe4\xb8\x8a\xe6\xb5\xb7"使用 --raw 参数,显示中文值–raw 参数介绍:对返回结果使用原始格式输出(当标准输出不是终端设备时,默认启用)Use raw formatting for replies (default when STDOUT is not a tty).通过 shell 脚本,判断当前是否是 tty:
redis@cjc-db-01:/home/redis$cat 00.sh #!/bin/shif [ -t 1 ];then echo "tty"else echo "no tty"firedis@cjc-db-01:/home/redis$sh 00.sh ttyredis-cli -p 6389 --raw -a "密码" 127.0.0.1:6389> hvals user:100225男18080上海96.判断字段是否存在
hexists <key> <field>示例如下:
127.0.0.1:6389> hexists user:1001 name(integer) 0127.0.0.1:6389> hexists user:1002 name(integer) 197.删除一个或多个字段
hdel <key> <field...> 示例如下:
127.0.0.1:6389> hkeys user:10021) "name"2) "gender"3) "height"4) "weight"5) "city"127.0.0.1:6389> hdel user:1002 weight(integer) 1127.0.0.1:6389> hkeys user:10021) "name"2) "gender"3) "height"4) "city"98.获取字段的数量
hlen <key>示例如下:
127.0.0.1:6389> hlen user:1002(integer) 499.对字段的整数值自增指定步长
hincrby <key> <field> <increment>示例如下:
127.0.0.1:6389> hget user:1002 height"180"127.0.0.1:6389> hincrby user:1002 height 1(integer) 181127.0.0.1:6389> hincrby user:1002 height 1(integer) 182127.0.0.1:6389> hget user:1002 height"182"100.迭代哈希表中的字段
hscan <key> <cursor> [MATCH pattern] [COUNT count]示例如下:
127.0.0.1:6389> hscan user:1002 0 match nam* count 11) "0"2) 1) "name" 2) "25"列表(List)操作
列表是一种有序、可重复的字符串序列,可以在头部、尾部高效地插入或删除元素。
101.从左侧插入一个或多个元素
lpush key element [element ...]示例如下:消息队列/任务队列/历史记录/最新动态/时间线
127.0.0.1:6389> lpush task_queue "send_mail"(integer) 1127.0.0.1:6389> lpush task_queue "create_mysql"(integer) 2127.0.0.1:6389> lpush task_queue "start_db"(integer) 3127.0.0.1:6389> lpush history "page_01"(integer) 1127.0.0.1:6389> lpush history "page_02"(integer) 2127.0.0.1:6389> lpush history "page_03"(integer) 3127.0.0.1:6389> lpush user:1001:timeline "douyin_001"(integer) 1127.0.0.1:6389> lpush user:1001:timeline "douyin_002"(integer) 2127.0.0.1:6389> lpush user:1001:timeline "douyin_003"(integer) 3102.获取列表的长度
llen <key>示例如下:
127.0.0.1:6389> lindex task_queue 2"send_mail"127.0.0.1:6389> llen task_queue(integer) 3127.0.0.1:6389> llen history(integer) 3127.0.0.1:6389> llen user:1001:timeline(integer) 3103.获取指定索引位置的元素
lindex <key> <index>示例如下:
127.0.0.1:6389> lindex task_queue 0"start_db"127.0.0.1:6389> lindex task_queue 1"create_mysql"127.0.0.1:6389> lindex task_queue 2"send_mail"127.0.0.1:6389> lindex task_queue 3(nil)104.从右侧插入一个或多个元素
rpush key element [element ...]示例如下:
127.0.0.1:6389> rpush task_queue "install_oracle"(integer) 4127.0.0.1:6389> rpush task_queue "install_PostgreSQL"(integer) 5查看
127.0.0.1:6389> lindex task_queue 3"install_oracle"127.0.0.1:6389> lindex task_queue 4"install_PostgreSQL"105.移除并返回列表左侧第一个元素
lpop <key>示例如下:
127.0.0.1:6389> lindex task_queue 0"start_db"127.0.0.1:6389> lpop task_queue"start_db"127.0.0.1:6389> lindex task_queue 0"create_mysql"106.移除并返回列表右侧第一个元素
rpop <key>示例如下:
127.0.0.1:6389> lindex task_queue 3"install_PostgreSQL"127.0.0.1:6389> lindex task_queue 4(nil)127.0.0.1:6389> rpop task_queue"install_PostgreSQL"127.0.0.1:6389> lindex task_queue 3(nil)127.0.0.1:6389> lindex task_queue 2"install_oracle"107.获取指定索引范围的元素
lrange <key> <start> <stop>示例如下:
127.0.0.1:6389> rpush task_queue "start_tomcat"(integer) 4127.0.0.1:6389> rpush task_queue "uinstall_php"(integer) 5127.0.0.1:6389> lrange task_queue 2 31) "install_oracle"2) "start_tomcat"127.0.0.1:6389> lrange task_queue 0 1001) "create_mysql"2) "send_mail"3) "install_oracle"4) "start_tomcat"5) "uinstall_php"108.删除指定数量的匹配元素
lrem <key> <count> <element>示例如下:
127.0.0.1:6389> lrange task_queue 0 1001) "create_mysql"2) "send_mail"3) "install_oracle"4) "start_tomcat"5) "uinstall_php"6) "start_pg"7) "uinstall_php"从头开始,删除前两个遇到的"uinstall_php",如果是从末尾删除,
127.0.0.1:6389> lrem task_queue 2 "uinstall_php"(integer) 2127.0.0.1:6389> lrange task_queue 0 1001) "create_mysql"2) "send_mail"3) "install_oracle"4) "start_tomcat"5) "start_pg"109.修剪列表,仅保留指定范围内的元素
ltrim <key> <start> <stop>示例如下:
127.0.0.1:6389> lrange task_queue 0 1001) "create_mysql"2) "send_mail"3) "install_oracle"4) "start_tomcat"5) "start_pg"127.0.0.1:6389> 仅保留2-5的元素
127.0.0.1:6389> ltrim task_queue 1 4OK127.0.0.1:6389> lrange task_queue 0 1001) "send_mail"2) "install_oracle"3) "start_tomcat"4) "start_pg"110.阻塞式从左侧移除元素,支持超时
blpop key [key ...] timeout示例如下:
127.0.0.1:6389> lrange task_queue 0 1001) "send_mail"2) "install_oracle"3) "start_tomcat"4) "start_pg"5) "uinstall_php"6) "restart_oracle"7) "create_tablespace"8) "send_mail"127.0.0.1:6389> blpop task_queue "send_mail" "uinstall_php" 101) "task_queue"2) "send_mail"127.0.0.1:6389> lrange task_queue 0 1001) "install_oracle"2) "start_tomcat"3) "start_pg"4) "uinstall_php"5) "restart_oracle"6) "create_tablespace"7) "send_mail"111.阻塞式从右侧移除元素,支持超时
brpop key [key ...] timeout示例如下:
127.0.0.1:6389> lrange task_queue 0 1001) "install_oracle"2) "start_tomcat"3) "start_pg"4) "uinstall_php"5) "restart_oracle"6) "create_tablespace"7) "send_mail"8) "start_pg"127.0.0.1:6389> brpop task_queue "start_pg" 101) "task_queue"2) "start_pg"127.0.0.1:6389> lrange task_queue 0 1001) "install_oracle"2) "start_tomcat"3) "start_pg"4) "uinstall_php"5) "restart_oracle"6) "create_tablespace"7) "send_mail"112.原子地将一个列表的尾部元素移动到另一个列表的头部
rpoplpush <source> <destination>示例如下:
127.0.0.1:6389> lrange task_queue 0 1001) "install_oracle"2) "start_tomcat"3) "start_pg"4) "uinstall_php"5) "restart_oracle"6) "create_tablespace"7) "send_mail"127.0.0.1:6389> lrange history 0 1001) "page_03"2) "page_02"3) "page_01"127.0.0.1:6389> rpoplpush task_queue history"send_mail"127.0.0.1:6389> lrange task_queue 0 1001) "install_oracle"2) "start_tomcat"3) "start_pg"4) "uinstall_php"5) "restart_oracle"6) "create_tablespace"127.0.0.1:6389> lrange history 0 1001) "send_mail"2) "page_03"3) "page_02"4) "page_01"集合(Set)操作
Set类型是一个元素唯一且无序的字符串集合,它的唯一性适合数据去重等。
113.向集合中添加一个或多个成员
sadd key member [member ...]示例如下:数据唯一性保证:注册邮箱去重
127.0.0.1:6389> sadd register_email "cjc@example.com"(integer) 1数据唯一性保证:记录每天访问的独立用户名
127.0.0.1:6389> sadd douyin:20260408 "chen" "cjc" "abc"(integer) 3社交关系挖掘:标签系统
127.0.0.1:6389> sadd article:123 "Redis" "MySQL" "DB"(integer) 3114.获取集合中所有成员
smembers <key>示例如下:
127.0.0.1:6389> smembers register_email1) "cjc@example.com"127.0.0.1:6389> smembers douyin:202604081) "cjc"2) "abc"3) "chen"115.获取集合中成员的数量
scard <key>示例如下:
127.0.0.1:6389> scard register_email(integer) 1127.0.0.1:6389> scard douyin:20260408(integer) 3116.随机返回一个或多个成员(不删除)
srandmember <key> [count]示例如下:随机推荐两种数据库标签的文章
127.0.0.1:6389> sadd article:001:tags "Oracle" "MySQL" "PostgreSQL" "SQLServer" "DB2"(integer) 5127.0.0.1:6389> srandmember article:001:tags 21) "MySQL"2) "SQLServer"127.0.0.1:6389> srandmember article:001:tags 21) "Oracle"2) "PostgreSQL"127.0.0.1:6389> srandmember article:001:tags 10001) "PostgreSQL"2) "MySQL"3) "Oracle"4) "SQLServer"5) "DB2"117.获取多个集合的交集
sinter key [key ...]示例如下:共同好友:用户1001和用户1002的交集
127.0.0.1:6389> sadd user:1001:friends "chen" "cjc" "abc"(integer) 3127.0.0.1:6389> sadd user:1002:friends "cjc" "bcd" "xyz"(integer) 3127.0.0.1:6389> sinter user:1001:friends user:1002:friends1) "cjc"118.获取第一个集合与其他集合的差集
sdiff key [key ...]示例如下:推荐好友:用户1001的朋友中,有哪些不是用户1002的朋友
127.0.0.1:6389> sdiff user:1001:friends user:1002:friends1) "abc"2) "chen"119.判断成员是否在集合中
sismember <key> <member>示例如下:
127.0.0.1:6389> sismember article:001:tags "MySQL"(integer) 1127.0.0.1:6389> sismember article:001:tags "Redis"(integer) 0120.获取多个集合的并集
sunion key [key ...]示例如下:
127.0.0.1:6389> smembers user:1001:friends1) "cjc"2) "abc"3) "chen"127.0.0.1:6389> smembers user:1002:friends1) "bcd"2) "cjc"3) "xyz"127.0.0.1:6389> sunion user:1001:friends user:1002:friends1) "abc"2) "chen"3) "cjc"4) "bcd"5) "xyz"121.随机移除并返回一个或多个成员
spop <key> [count]示例如下:模拟抽奖箱
127.0.0.1:6389> smembers user:1001:friends1) "cjc"2) "abc"3) "chen"127.0.0.1:6389> spop user:1001:friends 11) "cjc"127.0.0.1:6389> smembers user:1001:friends1) "abc"2) "chen"122.移除一个或多个成员
srem <key> <member...> 示例如下:
127.0.0.1:6389> smembers user:1001:friends1) "abc"2) "chen"127.0.0.1:6389> srem user:1001:friends "chen"(integer) 1127.0.0.1:6389> smembers user:1001:friends1) "abc"有序集合(Sorted Set)操作
与普通的Set不同,Sorted set(ZSet)在元素唯一性的基础上,为每个成员关联的一个score(分值),并以此进行自动排序。这使得ZSet天然适用于排序、优先队列等需要顺序保证的场景。
123.向有序集合中添加成员及其分数
zadd key [NX|XX] [GT|LT] [CH] [INCR] score member [score member ...]示例如下:用户在游戏中获得的得分
127.0.0.1:6389> zadd rank:global 1000 "player_001"(integer) 1127.0.0.1:6389> zadd rank:global 600 "player_002" 1200 "player_003"(integer) 2文章添加标签,并设置权重
127.0.0.1:6389> zadd article:tags 100 "体育" 200 "教育" 300 "住房"(integer) 3124.获取成员的分数
zscore key member示例如下:
127.0.0.1:6389> zscore rank:global "player_003""1200"125.按分数从小到大返回指定范围的成员
zrange key min max [BYSCORE|BYLEX] [REV] [LIMIT offset count] [WITHSCORES]示例如下:
127.0.0.1:6389> zrange rank:global 0 10 WITHSCORES1) "player_002"2) "600"3) "player_001"4) "1000"5) "player_003"6) "1200"127.0.0.1:6389> zrange rank:global 0 1 WITHSCORES1) "player_002"2) "600"3) "player_001"4) "1000"126.按分数从大到小返回指定范围的成员
zrevrange key start stop [WITHSCORES]示例如下:
127.0.0.1:6389> zrevrange rank:global 0 2 WITHSCORES1) "player_003"2) "1200"3) "player_001"4) "1000"5) "player_002"6) "600"127.按分数区间返回成员(从小到大)
zrangebyscore key min max [WITHSCORES] [LIMIT offset count]示例如下:
127.0.0.1:6389> zrangebyscore rank:global 500 1100 WITHSCORES 1) "player_002"2) "600"3) "player_001"4) "1000"128.按分数区间返回成员(从大到小)
zrevrangebyscore key max min [WITHSCORES] [LIMIT offset count]示例如下:
127.0.0.1:6389> zrevrangebyscore rank:global 500 1100 WITHSCORES(empty array)127.0.0.1:6389> zrevrangebyscore rank:global 1100 500 WITHSCORES1) "player_001"2) "1000"3) "player_002"4) "600"129.返回成员按分数升序的排名(从 0 开始)
zrank <key> <member>示例如下:
127.0.0.1:6389> zrank rank:global "player_001"(integer) 1127.0.0.1:6389> zrank rank:global "player_002"(integer) 0127.0.0.1:6389> zrank rank:global "player_003"(integer) 2130.返回成员按分数降序的排名
zrevrank <key> <member>示例如下:
127.0.0.1:6389> zrevrank rank:global "player_001"(integer) 1127.0.0.1:6389> zrevrank rank:global "player_002"(integer) 2127.0.0.1:6389> zrevrank rank:global "player_003"(integer) 0131.对成员的分数增加指定步长
zincrby key increment member示例如下:
127.0.0.1:6389> zscore rank:global "player_003""1200"127.0.0.1:6389> zincrby rank:global 50 "player_003""1250"127.0.0.1:6389> zscore rank:global "player_003""1250"132.获取有序集合的成员数量
zcard <key>示例如下:
127.0.0.1:6389> zcard rank:global(integer) 3133.获取分数在指定区间内的成员数量
zcount <key> <min> <max>示例如下:
127.0.0.1:6389> zcount rank:global 800 1200(integer) 1134.移除一个或多个成员
zrem key member [member ...] 示例如下:
127.0.0.1:6389> zadd rank:global 3000 "player_004" 6000 "player_005" 1500 "player_006"(integer) 3127.0.0.1:6389> zrange rank:global 0 10 WITHSCORES 1) "player_002" 2) "600" 3) "player_001" 4) "1000" 5) "player_003" 6) "1250" 7) "player_006" 8) "1500" 9) "player_004"10) "3000"11) "player_005"12) "6000"127.0.0.1:6389> zrem rank:global "player_004"(integer) 1127.0.0.1:6389> zrange rank:global 0 10 WITHSCORES 1) "player_002" 2) "600" 3) "player_001" 4) "1000" 5) "player_003" 6) "1250" 7) "player_006" 8) "1500" 9) "player_005"10) "6000"135.移除分数在指定区间内的所有成员
zremrangebyscore key min max示例如下:
127.0.0.1:6389> zremrangebyscore rank:global 5000 8000(integer) 1127.0.0.1:6389> zrange rank:global 0 10 WITHSCORES1) "player_002"2) "600"3) "player_001"4) "1000"5) "player_003"6) "1250"7) "player_006"8) "1500"欢迎关注我的微信公众号【JiekeXu DBA之路】,来一起学习新知识!
—————————————————————公众号:JiekeXu DBA之路墨天轮:https://www.modb.pro/u/4347CSDN :https://blog.csdn.net/JiekeXuITPUB:https://blog.itpub.net/69968215腾讯云:https://cloud.tencent.com/developer/user/5645107—————————————————————

2025 年公众号 JiekeXu DBA之路历史文章合集
2024 年公众号 JiekeXu DBA之路历史文章合集
2023 年公众号 JiekeXu DBA之路历史文章合集
2022 年公众号 JiekeXu DBA之路历史文章合集
2021 年公众号历史文章合集

夜雨聆风