Redis 命令速查
Redis 数据结构、命令、持久化、运维操作速查,支持搜索和一键复制
连接与通用(5)
连接 Redis
使用 redis-cli 连接服务器
# 本地连接
redis-cli
# 远程连接
redis-cli -h 192.168.1.100 -p 6379
# 带密码
redis-cli -h host -p 6379 -a password
# 选择数据库
SELECT 1测试连接
检查 Redis 是否正常
PING
# 返回 PONG 表示正常查看信息
查看服务器信息
INFO
# 查看内存信息
INFO memory
# 查看客户端
INFO clients
# 查看统计
INFO stats数据库大小
查看当前库的 Key 数量
DBSIZEACL 访问控制
Redis 6+ 用户与权限管理
# 列出所有用户
ACL LIST
# 查看用户权限
ACL GETUSER default
# 创建用户
ACL SETUSER myuser on >mypass ~user:* +get +setString 字符串(7)
设置/获取值
最基本的键值操作
# 设置
SET name "张三"
# 获取
GET name
# 设置并返回旧值
GETSET name "李四"设置过期时间
设置值同时设定过期
# 秒
SET token "abc123" EX 3600
# 毫秒
SET token "abc123" PX 3600000
# 等效命令
SETEX token 3600 "abc123"不存在时才设置
用于分布式锁等场景
# 不存在才设置
SET lock "1" NX EX 30
# 等效
SETNX lock "1"批量操作
一次设置/获取多个值
# 批量设置
MSET name "张三" age "25" city "北京"
# 批量获取
MGET name age city计数器
原子递增递减
SET views 0
# 递增 1
INCR views
# 递增 N
INCRBY views 10
# 递减
DECR views
DECRBY views 5字符串操作
追加、截取、长度
# 追加
APPEND name " 先生"
# 长度
STRLEN name
# 截取
GETRANGE name 0 2浮点计数
浮点数原子递增
SET price 99.5
INCRBYFLOAT price 0.5Hash 哈希(4)
设置/获取字段
操作哈希表字段
# 设置单个字段
HSET user:1 name "张三"
HSET user:1 age 25
# 获取单个字段
HGET user:1 name
# 获取所有字段
HGETALL user:1批量设置
一次设置多个字段
HMSET user:1 name "张三" age 25 email "zhang@example.com"
# 获取多个
HMGET user:1 name age email其他操作
删除、存在、所有键
# 删除字段
HDEL user:1 email
# 是否存在
HEXISTS user:1 name
# 所有字段名
HKEYS user:1
# 所有值
HVALS user:1
# 字段数量
HLEN user:1字段计数
哈希字段的原子递增
HINCRBY user:1 age 1
HINCRBYFLOAT product:1 price 9.99List 列表(4)
添加元素
从头部或尾部添加
# 头部添加
LPUSH queue "task1" "task2"
# 尾部添加
RPUSH queue "task3"
# 指定位置插入
LINSERT queue BEFORE "task3" "task2.5"弹出元素
从头部或尾部取出
# 头部弹出
LPOP queue
# 尾部弹出
RPOP queue
# 阻塞弹出(消息队列)
BLPOP queue 30查看元素
按索引或范围查看
# 查看全部
LRANGE queue 0 -1
# 查看前 10 个
LRANGE queue 0 9
# 按索引获取
LINDEX queue 0
# 列表长度
LLEN queue修剪列表
只保留指定范围的元素
# 只保留最新 100 条
LTRIM queue 0 99Set 集合(4)
添加/查看成员
集合的基本操作
# 添加
SADD tags "java" "python" "go"
# 所有成员
SMEMBERS tags
# 成员数量
SCARD tags
# 是否存在
SISMEMBER tags "java"删除/随机
删除和随机操作
# 删除
SREM tags "go"
# 随机取一个
SRANDMEMBER tags
# 随机弹出
SPOP tags集合运算
交集、并集、差集
SADD set1 "a" "b" "c"
SADD set2 "b" "c" "d"
# 交集
SINTER set1 set2 # b, c
# 并集
SUNION set1 set2 # a, b, c, d
# 差集
SDIFF set1 set2 # a集合运算存储
运算结果存入新 Key
SINTERSTORE dest set1 set2
SUNIONSTORE dest set1 set2
SDIFFSTORE dest set1 set2Sorted Set 有序集合(5)
添加成员
添加带分数的成员
ZADD leaderboard 100 "player1"
ZADD leaderboard 85 "player2"
ZADD leaderboard 92 "player3"排行榜查询
按分数排名查询
# 升序排名(分数低到高)
ZRANGE leaderboard 0 -1 WITHSCORES
# 降序排名(分数高到低)
ZREVRANGE leaderboard 0 9 WITHSCORES
# 查排名
ZREVRANK leaderboard "player1"
# 查分数
ZSCORE leaderboard "player1"范围查询
按分数范围查询
# 分数在 80-100 之间
ZRANGEBYSCORE leaderboard 80 100
# 统计范围内数量
ZCOUNT leaderboard 80 100
# 成员总数
ZCARD leaderboard增加分数
原子递增成员分数
ZINCRBY leaderboard 10 "player2"删除成员
按排名或分数范围删除
ZREM leaderboard "player3"
ZREMRANGEBYRANK leaderboard 0 2
ZREMRANGEBYSCORE leaderboard 0 80Stream(5)
添加消息
向流追加消息
XADD mystream * msg "hello" user "tom"
# 指定最大长度
XADD mystream MAXLEN 1000 * msg "hello"读取消息
按 ID 或时间读取
# 从最新开始读
XREAD STREAMS mystream 0
# 阻塞读取
XREAD BLOCK 5000 STREAMS mystream $
# 范围读取
XRANGE mystream - +范围查询
按 ID 范围查询流
XRANGE mystream - +
XRANGE mystream 0 9999999999999
XLEN mystream消费组
创建和管理消费组
XGROUP CREATE mystream mygroup 0
XGROUP CREATECONSUMER mystream mygroup c1
XGROUP DESTROY mystream mygroup消费组读取
消费组内读取消息
XREADGROUP GROUP mygroup c1 STREAMS mystream >
XACK mystream mygroup id1 id2
XPENDING mystream mygroupBitmap & HyperLogLog & Geo(6)
Bitmap 位图
位级操作,签到、在线状态
SETBIT sign:user:1 0 1
SETBIT sign:user:1 1 0
GETBIT sign:user:1 0
BITCOUNT sign:user:1BITOP 位运算
多键位运算
BITOP AND dest key1 key2
BITOP OR dest key1 key2
BITOP XOR dest key1 key2
BITOP NOT dest key1HyperLogLog
基数统计,极低内存
PFADD uv:20240227 user1 user2 user3
PFCOUNT uv:20240227
PFMERGE uv:week uv:mon uv:tue uv:wed地理位置添加
添加经纬度坐标
GEOADD locations 116.397128 39.916527 "北京"
GEOADD locations 121.473701 31.230416 "上海"地理位置查询
距离、范围、搜索
GEODIST locations "北京" "上海" km
GEORADIUS locations 116.4 39.9 100 km WITHDIST
GEOSEARCH locations FROMMEMBER "北京" BYRADIUS 500 kmGEOHASH
获取坐标的 Geohash 字符串
GEOHASH locations "北京" "上海"Key 管理(7)
查找 Key
按模式搜索 Key
# 所有 Key(生产慎用)
KEYS *
# 匹配模式
KEYS user:*
# 推荐用 SCAN
SCAN 0 MATCH user:* COUNT 100SCAN 迭代
游标迭代,不阻塞
SCAN 0 MATCH user:* COUNT 100
# 返回下次游标,0 表示结束
# HSCAN/SSCAN/ZSCAN 用于 Hash/Set/ZSet过期时间
设置和查看过期时间
# 设置过期(秒)
EXPIRE key 3600
# 设置过期(毫秒)
PEXPIRE key 3600000
# 查看剩余时间
TTL key
# 移除过期
PERSIST key删除/检查
删除和检查 Key
# 删除
DEL key1 key2
# 异步删除(大 Key)
UNLINK key1
# 是否存在
EXISTS key
# 查看类型
TYPE key重命名
重命名 Key
RENAME oldkey newkey
# 不存在才重命名
RENAMENX oldkey newkey内部编码
查看 Key 的底层编码
OBJECT ENCODING mykey
# 返回: string, list, ziplist, intset 等
OBJECT REFCOUNT mykey
OBJECT IDLETIME mykeyTTL 毫秒与时间戳
毫秒级 TTL 和 Unix 时间戳过期
PTTL key
EXPIREAT key 1700000000
PEXPIREAT key 1700000000000发布订阅(2)
发布消息
向频道发送消息
PUBLISH chat "Hello World"订阅频道
订阅一个或多个频道
# 订阅指定频道
SUBSCRIBE chat
# 模式订阅
PSUBSCRIBE chat:*事务与Lua(2)
事务
Redis 事务操作
MULTI
SET balance 100
DECRBY balance 20
INCRBY balance 50
EXEC
# 取消事务
DISCARDLua 脚本
执行 Lua 脚本保证原子性
# 限流脚本示例
EVAL "
local current = redis.call('INCR', KEYS[1])
if current == 1 then
redis.call('EXPIRE', KEYS[1], ARGV[1])
end
return current
" 1 rate:api 60持久化与运维(9)
RDB 快照
手动触发 RDB 持久化
# 阻塞保存
SAVE
# 后台保存(推荐)
BGSAVE
# 查看上次保存时间
LASTSAVEAOF 持久化
AOF 相关操作
# 手动触发 AOF 重写
BGREWRITEAOF
# redis.conf 配置
appendonly yes
appendfsync everysec清空数据
清空当前库或所有库
# 清空当前库
FLUSHDB
# 清空所有库(危险!)
FLUSHALL慢查询
查看慢查询日志
# 查看慢查询
SLOWLOG GET 10
# 慢查询数量
SLOWLOG LEN
# redis.conf 配置
slowlog-log-slower-than 10000 # 微秒
slowlog-max-len 128CONFIG 配置
动态获取和修改配置
CONFIG GET maxmemory
CONFIG SET maxmemory 256mb
CONFIG REWRITEINFO 详细分区
各模块详细信息
INFO server
INFO memory
INFO replication
INFO persistence
INFO stats
INFO clients内存管理
内存分析与诊断
MEMORY USAGE key
MEMORY STATS
MEMORY DOCTOR
MEMORY PURGECluster 集群
集群管理命令
CLUSTER INFO
CLUSTER NODES
CLUSTER MEET 192.168.1.2 6379
CLUSTER SLOTSSentinel 哨兵
哨兵高可用命令
SENTINEL masters
SENTINEL get-master-addr-by-name mymaster
SENTINEL slaves mymaster