Skip to content

07.3 - Redis 7 新特性

定位: Redis 7.0+ 的重要更新——性能、安全、功能提升 面试高频度: ⭐⭐⭐


主要新特性

特性说明价值
Redis Functions替代 Lua EVAL,脚本作为一等公民脚本管理更友好
ACL v2更细粒度的访问控制安全提升
Sharded Pub/SubCluster 下的广播支持集群功能补齐
Listpack替代 ziplist(Hash/List/ZSet)内存优化 + 消除连锁更新
Auto-failover 提速Cluster 故障转移更快高可用增强

关键变化

Redis Functions

> **Lua 脚本(EVAL/EVALSHA)的问题**:
> - ❌ 脚本和数据库绑定——重启后 SCRIPT FLUSH 导致客户端需要重新 LOAD
> - ❌ 脚本没有独立的版本管理

> **Redis Functions**:
> - ✅ 脚本注册在服务器中,持久化到 RDB/AOF
> - ✅ 可以通过库(Library)管理多个函数
> - ✅ 可以定义多个函数在一个库中

# 注册函数
redis-cli FUNCTION LOAD "#!lua name=mylib\nredis.register_function('myfunc', function(keys, args) return redis.call('GET', keys[1]) end)"

# 调用函数
redis-cli FCALL myfunc 1 mykey

Listpack 替换 Ziplist

Redis 7.0 用 Listpack 全面替代 Ziplist:

Ziplist 的问题:连锁更新
  插入一个元素 → 某个 entry 长度变化
  → 后续所有 entry 的 prevlen 需要更新
  → O(N) 内存重分配

Listpack 的改进:
  ✓ 每个 entry 自包含长度信息
  ✓ 不依赖前一个 entry 的长度
  ✓ 彻底消除连锁更新问题

其他变化

性能提升:
  ✓ 更快的 AOF 重写
  ✓ 更精确的过期算法
  ✓ 内存优化(Hash/List/ZSet 小数据更省内存)

安全性:
  ✓ ACL 改进(SELECT 权限、按命令类型授权)
  ✓ 更好的日志和审计

可观测性:
  ✓ 更详细的 INFO 统计
  ✓ 更好的 latency 监控

📚 相关链接

  • **Lua 脚本** — Redis Functions 替代的对象
  • **数据结构** — Listpack 替代 Ziplist
  • **Cluster** — Sharded Pub/Sub
  • ← 返回 **进阶特性索引**

Knowledge4J — Java 知识库