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 数量

DBSIZE

ACL 访问控制

Redis 6+ 用户与权限管理

# 列出所有用户
ACL LIST
# 查看用户权限
ACL GETUSER default
# 创建用户
ACL SETUSER myuser on >mypass ~user:* +get +set

String 字符串(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.5

Hash 哈希(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.99

List 列表(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 99

Set 集合(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 set2

Sorted 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 80

Stream(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 mygroup

Bitmap & HyperLogLog & Geo(6)

Bitmap 位图

位级操作,签到、在线状态

SETBIT sign:user:1 0 1
SETBIT sign:user:1 1 0
GETBIT sign:user:1 0
BITCOUNT sign:user:1

BITOP 位运算

多键位运算

BITOP AND dest key1 key2
BITOP OR dest key1 key2
BITOP XOR dest key1 key2
BITOP NOT dest key1

HyperLogLog

基数统计,极低内存

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 km

GEOHASH

获取坐标的 Geohash 字符串

GEOHASH locations "北京" "上海"

Key 管理(7)

查找 Key

按模式搜索 Key

# 所有 Key(生产慎用)
KEYS *
# 匹配模式
KEYS user:*
# 推荐用 SCAN
SCAN 0 MATCH user:* COUNT 100

SCAN 迭代

游标迭代,不阻塞

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 mykey

TTL 毫秒与时间戳

毫秒级 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
# 取消事务
DISCARD

Lua 脚本

执行 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
# 查看上次保存时间
LASTSAVE

AOF 持久化

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 128

CONFIG 配置

动态获取和修改配置

CONFIG GET maxmemory
CONFIG SET maxmemory 256mb
CONFIG REWRITE

INFO 详细分区

各模块详细信息

INFO server
INFO memory
INFO replication
INFO persistence
INFO stats
INFO clients

内存管理

内存分析与诊断

MEMORY USAGE key
MEMORY STATS
MEMORY DOCTOR
MEMORY PURGE

Cluster 集群

集群管理命令

CLUSTER INFO
CLUSTER NODES
CLUSTER MEET 192.168.1.2 6379
CLUSTER SLOTS

Sentinel 哨兵

哨兵高可用命令

SENTINEL masters
SENTINEL get-master-addr-by-name mymaster
SENTINEL slaves mymaster

相关工具