Redis常见管理命令
一、基础命令
1.同步执行 RDB 持久化(阻塞主线程),慎用!
127.0.0.1:6389> save OK2.异步执行 RDB 持久化(fork 子进程)
bgsave3.返回当前实例的角色(master/slave/sentinel)
role 示例如下: master角色: 127.0.0.1:6389> role 1) "master" 2) (integer) 6022666659 3) 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> role 1) "slave" 2) "192.0.6.17" 3) (integer) 6389 4) "connected" 5) (integer) 6022666226 sentinel角色: 127.0.0.1:7389> role 1) "sentinel" 2) 1) "mymaster"二:分片集群(Cluster)运维命令
打印集群的整体信息 cluster info 列出集群中所有节点及其状态 cluster nodes 检查集群 redis-cli --cluster check 192.0.6.73:8001 -a "******" 为新节点分配哈希槽(reshard) redis-cli --cluster reshard 192.168.1.101:8003 -a "******" 删除节点 redis-cli --cluster del-node 192.168.1.103:8001 7af3a74056926943fe82649659b6e2c46997a8f1 -a "******" 新增Master节点: redis-cli --cluster add-node 192.168.1.101:8003 192.168.1.101:8001 -a "******" 新增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 "******" 迁移slot: redis-cli --cluster reshard 192.168.1.103:8001 -a "******" 平衡slot: redis-cli --cluster rebalance 192.168.1.101:8003 -a "******" 将指定节点添加到当前集群 cluster meet <ip> <port> 从集群中移除指定节点 cluster forget <node-id> 将当前节点设置为指定主节点的从节点 cluster replicate 将集群配置保存到节点配置文件中 cluster saveconfig 将一个或多个槽指派给当前节点 cluster addslots [slot ...] 移除当前节点上的槽指派 cluster delslots [slot …] 移除当前节点的所有槽 cluster flushslots 将槽指派给指定节点 cluster setslot <slot> node <node-id>计算key所属的槽位
计算 key 所属的槽位 cluster keyslot <key> 示例如下: 127.0.0.1:8001> cluster keyslot a (integer) 15495 127.0.0.1:8001> cluster keyslot b (integer) 3300 127.0.0.1:8001> cluster keyslot c (integer) 7365 127.0.0.1:8001> cluster keyslot 1 (integer) 9842 127.0.0.1:8001> cluster keyslot 2 (integer) 5649 127.0.0.1:8001> cluster keyslot 3 (integer) 1584返回槽位中包含的 key 数量
cluster countkeysinslot <slot> 示例如下: 192.0.6.73:8004> cluster countkeysinslot 7365 (integer) 1创建分片集群
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 "******"列出所有的客户端连接
列出所有客户端连接 client list配置管理命令
获取指定配置参数的值,CONFIG GET * 查看所有
config get <parameter> 示例如下: 192.0.6.73:8004> config get dir 1) "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"三、动态修改配置参数(重启后失效)
config set <parameter> <value> 示例如下: 192.0.6.73:8004> config get slowlog-max-len 1) "slowlog-max-len" 2) "128" 192.0.6.73:8004> config set slowlog-max-len 256 OK 192.0.6.73:8004> config get slowlog-max-len 1) "slowlog-max-len" 2) "256"四、将当前配置持久化到 redis.conf 文件
config rewrite 示例如下: 127.0.0.1:8001> config get slowlog-max-len 1) "slowlog-max-len" 2) "128" 127.0.0.1:8001> config set slowlog-max-len 256 OK 127.0.0.1:8001> config get slowlog-max-len 1) "slowlog-max-len" 2) "256" cat /redis/8001/conf/redis.conf |grep slowlog-max-len slowlog-max-len 128 127.0.0.1:8001> config rewrite OK cat /redis/8001/conf/redis.conf |grep slowlog-max-len slowlog-max-len 256重置 INFO 命令中的统计信息
config resetstat 示例如下: 127.0.0.1:8001> config resetstat OK扫描并找出大 key
redis-cli --bigkeys 示例如下: redis-cli -p 6389 -a "flzx3Qc!" --bigkeys目标生产库进行压测
压测: 100个客户端,同时请求redis,一共执行20000次。 redis-benchmark -p 6389 -h 25.19.118.70 -c 100 -n 20000 500个客户端,同时请求redis,一共执行20000次。 redis-benchmark -p 6389 -h 25.19.118.70 -a yELxh_3qSiXr -c 500 -n 20000 -q五、通用操作
切换数据库(指定数据库 0-15,默认 0)
select <db_index> 示例如下: 127.0.0.1:6389> select 5 OK 127.0.0.1:6389[5]>1、删除一个或多个 key
del <key...> 示例如下 127.0.0.1:6389> del a (integer) 1 127.0.0.1:6389> del b c (integer) 2非阻塞删除(异步删除)
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`,判断 key 是否存在
exists <key> 示例如下: 127.0.0.1:6389> exists abc (integer) 1 127.0.0.1:6389> exists bcd (integer) 0查看 key 剩余生存时间(秒)
127.0.0.1:6389> set a 123 OK 127.0.0.1:6389> ttl a (integer) -1 127.0.0.1:6389> set b 123 ex 100 OK 127.0.0.1:6389> ttl b (integer) 97查看 key 剩余生存时间(毫秒)
pttl <key> 示例如下 127.0.0.1:6389> pttl b (integer) 82033为 key 设置过期时间(秒)
expire <key> <seconds> 示例如下: 127.0.0.1:6389> ttl a (integer) -1 127.0.0.1:6389> expire a 100 (integer) 1 127.0.0.1:6389> ttl a (integer) 97以毫秒为单位设置过期时间
pexpire <key> <milliseconds> 示例如下: 127.0.0.1:6389> pexpire a 100000 (integer) 1 127.0.0.1:6389> ttl a (integer) 98 127.0.0.1:6389> pttl a (integer) 78329设置 key 在指定时间戳过期
expireat <key> <timestamp> 示例如下 127.0.0.1:6389> expireat a 78329 (integer) 1 127.0.0.1:6389> ttl a (integer) -2 127.0.0.1:6389> get a (nil)2、移除 key 的过期时间,使其永久有效
persist <key> 示例如下 127.0.0.1:6389> set a 123 ex 60 OK 127.0.0.1:6389> ttl a (integer) 57 127.0.0.1:6389> persist a (integer) 1 127.0.0.1:6389> ttl a (integer) -1查看 key 的数据类型type <key> 示例如下 127.0.0.1:6389> type a string3、查看 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 123abc OK 127.0.0.1:6389> object encoding b "embstr"4、重命名 key,若新 key 存在则覆盖
rename <oldkey> <newkey> 示例如下 127.0.0.1:6389> set a 123 OK 127.0.0.1:6389> set b 456 OK 127.0.0.1:6389> rename a b OK 127.0.0.1:6389> get b "123" 127.0.0.1:6389> get a (nil)5、重命名 key,仅当新 key 不存在时成功
renamenx <oldkey> <newkey> 示例如下 127.0.0.1:6389> set a 123 OK 127.0.0.1:6389> set b 456 OK 127.0.0.1:6389> renamenx a b (integer) 0 127.0.0.1:6389> get b "456" 127.0.0.1:6389> get a "123" 127.0.0.1:6389> renamenx a c (integer) 1 127.0.0.1:6389> get c "123"6、将 key 移动到另一个数据库
move <key> <db_index> 示例如下 127.0.0.1:6389> set a 123 OK 127.0.0.1:6389> move a 5 (integer) 1 127.0.0.1:6389> get a (nil) 127.0.0.1:6389> select 5 OK 127.0.0.1:6389[5]> get a "123"从当前数据库随机返回一个 key
randomkey 示例如下 127.0.0.1:6389> randomkey "b" 127.0.0.1:6389> randomkey "d" 127.0.0.1:6389> randomkey "e"查找匹配模式的 key(生产环境慎用)
keys <pattern> 示例如下 127.0.0.1:6389> keys a (empty array) 127.0.0.1:6389> keys b 1) "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"7、序列化 key 并返回其值
dump <key> 通过 序列化 和 反序列化操作,可以实现对单个key的备份/恢复、迁移等工作。 示例如下: 127.0.0.1:6389> set a 123 OK 127.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>8.对列表、集合或有序集合进行排序
sort <key> 示例如下 对列表(List)进行数字升序排序 127.0.0.1:6389> LPUSH numbers 5 2 3 6 1 (integer) 5 127.0.0.1:6389> sort numbers 1) "1" 2) "2" 3) "3" 4) "5" 5) "6" 127.0.0.1:6389> sort numbers desc 1) "6" 2) "5" 3) "3" 4) "2" 5) "1"六、不同类型 keys 的操作
1.字符串(String)操作
设置字符串值,支持过期时间和存在性判断 set <key> <value> [NX|XX] [EX|PX] 示例如下 127.0.0.1:6389> set cjc 123 ex 10 OK 获取 key 的值 get <key> 示例如下 127.0.0.1:6389> get cjc "123" 批量设置多个字符串值 mset <key> <value> [key value ...] 示例如下 127.0.0.1:6389> mset cjc01 1 cjc02 b cjc03 c OK 127.0.0.1:6389> keys cjc* 1) "cjc03" 2) "cjc01" 3) "cjc02" 批量获取多个 key 的值 mget <key...> 示例如下 127.0.0.1:6389> mget cjc01 cjc02 cjc03 1) "1" 2) "b" 3) "c" 设置值并指定过期时间(秒) setex <key> <seconds> <value> 示例如下 127.0.0.1:6389> setex cjc04 100 3 OK 127.0.0.1:6389> get cjc04 "3" 127.0.0.1:6389> ttl cjc04 (integer) 92 以毫秒为单位设置值并指定过期时间 psetex <key> <milliseconds> <value> 示例如下 127.0.0.1:6389> psetex cjc05 100000 100 OK 127.0.0.1:6389> get cjc05 "100" 127.0.0.1:6389> ttl cjc05 (integer) 91 127.0.0.1:6389> pttl cjc05 (integer) 83576 不存在时设置值 setnx <key> <value> key 示例如下 127.0.0.1:6389> setnx cjc05 100 (integer) 0 127.0.0.1:6389> setnx cjc06 100 (integer) 1