Redis 7.0+ 新特性命令速查手册

1 min入门

Redis 7.0+ 新特性命令速查手册 的完整教学讲解。

Redis Functions(7.0+)

基本写法:FUNCTION LOAD 加载函数库 FUNCTION LOAD [REPLACE] '#!lua name=<库名> ...'

-- Redis 7.0 引入 Function:作为 EVAL/SCRIPT 的演进(并非移除 EVAL,
--    两者并存;新代码官方推荐 Function,可持久化、有名字、好管理)
FUNCTION LOAD "#!lua name=mylib
redis.register_function('myset',
  function(keys, args)
    redis.call('SET', keys[1], args[1])
    redis.call('EXPIRE', keys[1], args[2])
    return redis.call('GET', keys[1])
  end
)"

-- REPLACE 覆盖同名库
FUNCTION LOAD REPLACE "#!lua name=mylib ..."

-- 调用函数
FCALL myset 1 mykey myvalue 60
-- 参数:函数名 key数量 key... arg...

基本写法:FUNCTION 管理命令 FUNCTION LIST | DUMP | RESTORE | DELETE | STATS

-- 列出所有函数库
FUNCTION LIST
FUNCTION LIST WITHCODE          -- 显示代码

-- 导出函数库(二进制)
FUNCTION DUMP

-- 恢复函数库
FUNCTION RESTORE <serialized> [FLUSH|APPEND|REPLACE]

-- 删除函数库
FUNCTION DELETE mylib

-- 查看函数执行统计
FUNCTION STATS
-- 返回:running_script, engines

基本写法:FCALL vs EVAL 对比 FCALL <函数> <key数> ... | EVAL <脚本> <key数> ...

-- 传统 Lua 脚本(每次传输脚本文本;SCRIPT FLUSH 或重启后需重新加载)
EVAL "return redis.call('GET', KEYS[1])" 1 mykey

-- Redis Function(持久化、可读、可管理)
FCALL my_get 1 mykey

-- 优势对比:
-- 持久化:Function 随 RDB/AOF 持久化,重启不丢;Lua 重启丢失需重新 LOAD
-- 主从复制:Function 定义复制到从库;Lua 脚本内容复制
-- 可读性:函数名 vs SHA1 哈希
-- RESP3:Function 可返回 Map/Set 类型

Sharded Pub/Sub(7.0+)

基本写法:SSUBSCRIBE / SPUBLISH SSUBSCRIBE <频道> | SPUBLISH <频道> <消息>

-- 分片发布订阅:消息只在频道所属分片传播,不广播全集群
-- 订阅分片频道(必须连接拥有该频道槽位的节点)
SSUBSCRIBE orders

-- 发布到分片频道
SPUBLISH orders '{"id":123}'

-- 返回收到消息的订阅者数
-- 优势:集群环境下线性扩展吞吐量
-- 限制:不支持 PSUBSCRIBE 模式订阅

基本写法:Hash Tag 共址订阅 SSUBSCRIBE {user100}.events

-- 用 Hash Tag 确保相关频道在同一分片
SSUBSCRIBE {user100}.events
SPUBLISH {user100}.events 'login'

-- 查看分片频道订阅(在所属节点执行)
PUBSUB SHARDCHANNELS orders*
PUBSUB SHARDNUMSUB orders

Multi-Part AOF(7.0+)

基本写法:AOF 多文件结构 appendonly yes

# Redis 7.0 AOF 重构为多文件结构
appendonly yes
appenddirname "appendonlydir"

# 文件结构:
# appendonlydir/
#   appendonly.aof.manifest          -- 清单
#   appendonly.aof.1.base.rdb        -- Base:RDB 格式全量快照
#   appendonly.aof.1.incr.aof        -- 增量 AOF
#   appendonly.aof.2.incr.aof        -- 下一个增量

# 优势:
# - 重写时无需大内存缓冲区
# - 增量文件轮转,渐进清理
# - 可选择性恢复

基本写法:AOF 相关命令 BGREWRITEAOF | CONFIG SET auto-aof-rewrite-percentage

-- 手动触发 AOF 重写
BGREWRITEAOF

-- 自动重写触发条件
CONFIG SET auto-aof-rewrite-percentage 100
CONFIG SET auto-aof-rewrite-min-size 64mb

-- AOF 策略
CONFIG SET appendfsync everysec    -- always|everysec|no

listpack 全面替代 ziplist(7.0+)

基本写法:listpack 配置 hash-max-listpack-entries | zset-max-listpack-entries

# Redis 7.0 用 listpack 替代 ziplist,消除连锁更新问题
hash-max-listpack-entries 512
hash-max-listpack-value 64
zset-max-listpack-entries 128
zset-max-listpack-value 64
list-max-listpack-size -2
stream-node-max-bytes 4096

# 旧的 ziplist 配置自动忽略
# hash-max-ziplist-entries (已废弃)

基本写法:查看编码 OBJECT ENCODING <key>

-- 小数据用 listpack 编码,大数据用 hashtable/skiplist
SET k v
OBJECT ENCODING k    -- listpack(小)或 skiplist(大)

-- listpack 优势:
-- 无 prevlen 字段,彻底消除连锁更新
-- 高并发写入下无延迟抖动

ACL v2(7.0+)

基本写法:Selector 选择器 ACL SETUSER <用户> on >pwd (<规则组1>) (<规则组2>)

-- ACL v2 支持多组规则,根规则或任一 selector 匹配即允许
ACL SETUSER dev on >pwd \
  (~dev:* +@all) \
  (~prod:* +@read -@dangerous)

-- 频道权限独立控制
ACL SETUSER sub on >pwd &channel:* +@pubsub

-- 查看 selector
ACL GETUSER dev
-- 返回 selectors 字段列出所有选择器

Redis 7.2 新特性

基本写法:JSON.MERGE / JSON.MSET(RedisJSON 2.6+) JSON.MERGE <key> <path> <value> | JSON.MSET <key> <path> <value> ...

-- JSON.MERGE 合并值到匹配路径
JSON.SET doc $ {"a":1,"b":{"c":2}}
JSON.MERGE doc $.b {"d":3}
-- 结果:{"a":1,"b":{"c":2,"d":3}}

-- JSON.MSET 批量设置
JSON.MSET k1 $.a 1 k2 $.a 2 k3 $.a 3

基本写法:地理多边形搜索(7.2) GEOSEARCH <key> FROMMEMBER <成员> BYRADIUS ... | ...

-- Redis 7.2 RedisSearch 支持多边形地理查询
-- 基础 GEOSEARCH(圆形)
GEOSEARCH stores FROMLONLAT 116.40 39.90 BYRADIUS 5 km ASC

-- 多边形搜索(需 RedisSearch 模块)
FT.SEARCH idx '@location:[POLYGON 116.38 39.88 116.42 39.88 116.42 39.92 116.38 39.92]'

基本写法:sorted set 性能提升 ZADD | ZRANGE(7.2 优化)

-- Redis 7.2 sorted set 性能提升 30%~100%
-- 命令语法不变,底层优化
ZADD leaderboard 100 'Alice' 200 'Bob'
ZRANGE leaderboard 0 9 WITHSCORES REV

Redis 7.4 新特性预览

基本写法:Hash 字段过期(7.4+) HEXPIRE <key> <秒> FIELDS <n> <字段> | HTTL <key> FIELDS <n> <字段>

-- Redis 7.4 支持 Hash 单字段过期
HEXPIRE user:1001 3600 FIELDS 1 session_token
HTTL user:1001 FIELDS 1 session_token
HPERSIST user:1001 FIELDS 1 session_token

-- 字段过期后自动删除,不影响其他字段