07.3 - Redis 7 新特性
定位: Redis 7.0+ 的重要更新——性能、安全、功能提升 面试高频度: ⭐⭐⭐
主要新特性
| 特性 | 说明 | 价值 |
|---|---|---|
| Redis Functions | 替代 Lua EVAL,脚本作为一等公民 | 脚本管理更友好 |
| ACL v2 | 更细粒度的访问控制 | 安全提升 |
| Sharded Pub/Sub | Cluster 下的广播支持 | 集群功能补齐 |
| 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 mykeyListpack 替换 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
- ← 返回 **进阶特性索引**