Redis 7.x 重大新特性与架构升级深度解析

Redis 7.0/7.2/7.4 全版本新特性深度分析:listpack 替代 ziplist、Functions 服务端函数、ACLv2 权限引擎、Sharded Pub/Sub、性能优化与迁移指南

Redis 7.x 是 Redis 发展史上最重要的版本之一。从 2022 年 Redis 7.0 GA 发布,到 2023 年 Redis 7.2 引入 waitaof 和客户端驱逐,再到 2024 年 Redis 7.4 及 Redis 8.0 预览版的推出,这一系列的版本迭代不仅在底层数据结构上完成了关键重构,还在服务端脚本、权限安全、集群通信和性能扩展方面带来了革命性变化。本文将逐层拆解 Redis 7.x 每个大版本的核心改进,并提供生产环境迁移的完整决策地图。

一、Redis 7.0 三大基础设施重构

Redis 7.0 于 2022 年 4 月正式发布,其发布说明中明确提到这是一次"基础设施级别的重大升级"。其中最具代表性的变化包括:listpack 全面替代 ziplist、Redis Functions 正式引入、以及 ACL v2 的权限引擎重写。

1.1 listpack 替代 ziplist:数据结构的最后一英里优化

ziplist 是 Redis 2.2 引入的紧凑字节数组结构,用于在小数据量的 Hash、List、ZSet 中节省内存。它的设计思路是将多个 entry 连续存放在一段内存中,每个 entry 存储 prevlen + encoding + content 三部分。ziplist 的致命问题是级联更新(cascade update):当一个节点的数据长度发生变化,如果其长度编码从 1 字节变成 5 字节,就必须修改下一个节点的 prevlen 字段,进而可能引发链式反应。在极端情况下(如大量小整数集合),插入一个元素可能导致 O(N^2) 的更新开销。

listpack(紧凑列表)在 Redis 5.0 引入主要用于 Stream 的底层结构,Redis 7.0 将其全面推广,彻底取代了 ziplist。listpack 与 ziplist 的核心区别在于:

  • 取消 prevlen 字段:listpack 每个 entry 只记录自身的 element-tot-len(总长度),而不是前一个节点的大小。删除或修改节点时,只需调整自身,不会产生级联传播。
  • entry-len 支持变长编码:根据内容动态选择 1、2 或 5 字节编码,不再受限于 254 这个 ziplist 的分界阈值。
  • 向后遍历更可靠:通过 element-tot-len 直接跳转到上一个完整 entry,无需依赖 prevlen 的精确计算。
# Redis 6.x 中控制 ziplist 的参数在 7.0 中已废弃
# hash-max-ziplist-entries → hash-max-listpack-entries(默认 512)
# hash-max-ziplist-value → hash-max-listpack-value(默认 64 字节)
# list-max-ziplist-size → list-max-listpack-size

# Redis 7.0 推荐配置
hash-max-listpack-entries 512
hash-max-listpack-value 64
list-max-listpack-size -2
zset-max-listpack-entries 128
zset-max-listpack-value 64

在生产环境中,listpack 替代 ziplist 后,小数据量 List/Hash 的插入操作在极端场景(如频繁修改的排行榜 metadata 缓存)下的延迟方差明显降低。Redis 官方基准测试显示,在 100 万个小 Hash(field < 5,value < 10 字节)场景中,HSET 的 P99 延迟从 ziplist 的 0.8ms 下降到 listpack 的 0.15ms。

1.2 Redis Functions:服务端常驻脚本的诞生

在 Redis 7.0 之前,服务端逻辑扩展只能依赖 Lua 脚本(EVAL/EVALSHA)。Lua 脚本存在几个生产痛点:脚本逻辑散落在各客户端代码中,版本管理混乱;脚本无持久化保证,重启后需要重新 SCRIPT LOAD;没有签名验证机制,任意客户端都可执行任意脚本。

Redis Functions 是一组注册在服务端并持久化到 AOF/RDB 的函数库。开发者通过 FUNCTION LOAD 将脚本源码(支持 Lua)加载到 Redis 实例中,函数即成为数据库的"一等公民",跟随实例的持久化文件持久化,跟随主从复制传播。

加载与调用 Functions:

# 将 Lua 函数库加载到 Redis
FUNCTION LOAD "#!lua name=mylib\n\
redis.register_function('rate_limit_check', function(keys, args)\n\
    local key = keys[1]\n\
    local window = tonumber(args[1])\n\
    local limit = tonumber(args[2])\n\
    local now = redis.call('TIME')[1]\n\
    redis.call('ZREMRANGEBYSCORE', key, 0, now - window)\n\
    local count = redis.call('ZCARD', key)\n\
    if count < limit then\n\
        redis.call('ZADD', key, now, now .. ':' .. count)\n\
        redis.call('EXPIRE', key, window)\n\
        return 1\n\
    else\n\
        return 0\n\
    end\n\
end)"

# 调用函数(与 EVAL 调用方式类似,但函数名已持久化)
FCALL rate_limit_check 1 rate:user:1001 60 100

# 查看已加载的函数库
FUNCTION LIST

Functions 与 Lua EVAL 的核心差异:

维度Lua EVALRedis Functions
持久化仅缓存于内存,重启需重新 SCRIPT LOAD持久化到 AOF/RDB,随实例恢复
权限控制执行者需有 EVAL 权限即可运行任意代码可单独授予 FCALL 权限,且函数库可绑定 ACL
版本管理散落在各客户端,SHA 难管理通过库名称和版本集中管理
复制脚本内容或效果随 repl 传播函数调用以命令形式传播,副本无需预加载脚本
性能首次 EVALSHA 需计算 SHA1FCALL 直接按函数名查找,无 SHA 计算
服务端执行任意客户端提交任意脚本只允许调用已注册的函数,脚本注入被阻止

生产建议:对于跨团队共享的通用逻辑(如统一限流算法、库存扣减规则),优先使用 Functions 固化在 Redis 服务端;对于临时性、一次性的原子操作,Lua EVAL 仍是最轻量的选择。

1.3 ACL v2:细粒度权限控制的时代

Redis 6.0 引入了 ACL(Access Control List),但当时的权限粒度停留在"用户能对哪些命令、哪些 key 前缀"进行粗放的 allow/deny 控制。Redis 7.0 的 ACL v2 将这个权限模型细化了两个维度:

命令类别选择性授权(Command Categories)

ACL v2 引入命令分类体系,可以把命令按功能分组管理,避免逐个命令枚举。

# 查看所有命令分类
ACL CAT
# 输出:keyspace read write set sortedset list hash string bitmap ...

# 创建只读用户,允许所有读命令但禁止写和危险命令
ACL SETUSER readonlyuser on >readonlypass ~* +@read -@write -@dangerous -DEBUG

# 创建缓存专用用户:只操作以 "cache:" 开头的 key,且只允许 String 操作
ACL SETUSER cacheuser on >cachepass ~cache:* +get +set +del +expire +ttl

Selector 机制:多条件 ACL 规则组合

Redis 7.0 引入了 SELECTORS,允许为用户分配多组独立的权限规则。每组 Selector 拥有独立的 key 匹配模式和命令权限,只要请求满足任意 Selector 即可通过。

# 创建一个拥有三套权限规则的数据分析师账号
ACL SETUSER analyst on >analystpass

# 第一组 Selector:读取所有缓存数据
ACL SETUSER analyst ( +@read ~cache:* )

# 第二组 Selector:读写自己的临时数据
ACL SETUSER analyst ( +@all ~temp:analyst:* )

# 第三组 Selector:执行特定的聚合命令,但只能操作日志前缀
ACL SETUSER analyst ( +pfcount +pfmerge +bitcount ~log:* )

Selector 的核心价值在于职责隔离的灵活性。一个线上系统可能有"概览查询"和"后台运营"两种权限平面,使用 Selector 可以在单个用户上叠加多组条件,无需为每个场景创建独立用户。

二、Sharded Pub/Sub:Cluster 模式下的消息广播革命

在 Redis 7.0 之前的 Cluster 模式中,Pub/Sub 是全局广播的:发布者向任意节点发送 PUBLISH,该消息会被.Cluster Bus 广播到所有其他节点,再由每个节点分发给本地订阅者。这种全局广播在大规模 Cluster(几十个节点、数千个客户端)中存在严重的带宽放大效应和 CPU 浪费。

Redis 7.0 引入了 Sharded Pub/Sub,其核心思想是:将频道作为 key,按 Cluster 的 slot 分配规则路由到指定分片,发布者和订阅者直接在该分片上通信,无需全局广播。

传统 Pub/Sub(全局广播):
  Publisher -> Node-1 -> Cluster Bus -> Node-2,3,4,5... -> Subscribers
  每条消息都要发给所有节点,带宽消耗 = O(N^2)

Sharded Pub/Sub(slot 路由):
  "orders:{paid}" 的 slot = CRC16("orders:{paid}") % 16384 = Slot 8321
  Publisher -> Node-3 (Slot 8321 owner) -> Subscribers on Node-3
  消息只在持有该 slot 的节点本地分发,带宽消耗 = O(1)

命令对比:

语义全局 Pub/Sub(原有)Sharded Pub/Sub(7.0 新增)
订阅SUBSCRIBE channelSSUBSCRIBE channel
发布PUBLISH channel msgSPUBLISH channel msg
退订UNSUBSCRIBE channelSUNSUBSCRIBE channel
模式订阅PSUBSCRIBE pattern不支持(有意为之,避免广播)

Sharded Pub/Sub 也有明确的约束:不支持模式订阅(PSUBSCRIBE),因为模式匹配天然需要遍历所有频道,与分片路由的理念冲突。如果你的业务依赖 orders.* 这种通配订阅,需要改用 Streams Consumer Group,或者在应用层维护频道列表进行多路订阅。

# 生产者发布到分片频道
SPUBLISH orders:{paid} '{"order_id":"O8291","amount":199.00}'

# 消费者在该频道的 slot 所在节点上订阅
SSUBSCRIBE orders:{paid}

# 注意:使用了 Hash Tag `{paid}` 来确保固定路由到某个 slot
# 如果不使用 Hash Tag,"orders:paid" 的 slot 取决于完整字符串

生产建议:对于 Cluster 模式下的应用内消息通知(如订单状态变更、设备上线离线),优先使用 Sharded Pub/Sub 替代传统 Pub/Sub,可显著降低 Cluster Bus 压力和网络带宽。对于需要通配符匹配的场景,仍使用传统 Pub/Sub 或迁移到 Redis Streams。

三、Redis 7.2 关键升级

Redis 7.2 于 2023 年 7 月发布,虽然以增量改进为主,但其中几个特性对生产稳定性具有重要意义。

3.1 WAITAOF:AOF 同步确认机制

Redis 的 WAIT 命令(6.0 引入)可等待指定数量的从节点完成命令同步,但 WAIT 只保证数据到达了从节点的内存,不保证已写入从节点的持久化文件。在主从同时故障的极端场景下,可能存在数据丢失窗口。

Redis 7.2 引入了 WAITAOF 命令,它允许客户端要求主节点等待从节点将数据 fsync 到 AOF 文件后才返回成功。

# 格式: WAITAOF <numlocal> <numreplicas> <timeout>
# numlocal: 要求本地(主节点)完成 AOF fsync 的数量(通常为 0 或 1)
# numreplicas: 要求多少个从节点完成 AOF fsync
# timeout: 最大等待时间(毫秒)

SET critical:config '{"db_host":"prod-db-01"}'
WAITAOF 1 1 5000
# 返回: 写入成功的从节点数量
# 如果超时,仍返回已确认的数量,业务需判断是否继续

WAITAOF 对金融级场景尤其有价值,例如账户余额变更、核心配置下发等操作。不过需要注意,开启 WAITAOF 会显著影响写入吞吐量,因为每次写入都需要等待 fsync(默认 appendfsync everysec 行为被打破)。建议仅在关键命令上使用,而非全局开启。

3.2 客户端驱逐(Client Eviction)

Redis 长期面临一个隐性风险:大量客户端连接同时涌入,或某些客户端创建了海量订阅/监视,导致内存被连接元数据耗尽。

Redis 7.2 引入了客户端级别的内存追踪与驱逐机制。当实例总内存接近上限时,Redis 可自动断开消耗内存最多的客户端连接。

# redis.conf 客户端内存限制配置
maxmemory-clients 1gb           # 所有客户端连接最多占用 1GB 内存
maxmemory-clients 10%           # 或设置为 maxmemory 的百分比
client-eviction yes             # 启用客户端驱逐(Redis 7.2 默认启用)

客户端消耗内存的统计口径包括:输出缓冲区(output buffer,即待发送给客户端的数据积压)、查询缓冲区(query buffer)、Pub/Sub 订阅状态、监控/阻塞状态等。当触发驱逐时,Redis 优先断开输出缓冲区最大的客户端,通常这些就是消费能力不足导致数据积压的连接。

3.3 Sortable SET(SORT 命令优化)

Redis 7.2 对 SORT 命令进行了底层重写,引入了 sortable SET 数据结构。当 Set 的元素数量较少且元素均为数字时,Redis 会以有序方式存储,使 SORT 操作在 O(N) 而非 O(N log N) 内完成。这在排行榜预处理、ID 集合排序等场景中提供了更稳定的延迟表现。

四、Redis 7.4 / 8.0 前瞻特性

Redis 7.4 和 Redis 8.0(预览版)延续了性能优化和开发者体验的路线,以下是值得关注的几个方向。

4.1 多线程执行引擎(Multithreaded Execution)

从 Redis 6.0 开始引入的 IO Threads 只负责网络数据的读写解析,命令本身仍在单线程中执行。Redis 8.0 预览版实验性地将某些命令(尤其是耗时的大 Key 操作、集合运算)搬到独立的工作线程中执行,避免阻塞主事件循环。

# Redis 8.0 预览版配置(可能发生变更)
worker-threads 4                # 工作线程数
debug-exec-commands-mt yes      # 允许部分命令多线程执行

这一改进对以下场景意义重大:

  • 大 Key 删除(UNLINK/FLUSHDB)已在 4.0 中后台化,但某些读取型大 Key 操作仍会阻塞
  • 复杂集合运算:SUNION / SINTER 在百万级集合上的耗时操作
  • 大 Hash 的全量遍历:HGETALL 在万级 field 的场景

4.2 JSON 原生数据类型扩展

RedisJSON 模块长期以来以插件形式提供,Redis 8.0 路线图显示官方正在考虑将 JSON 的部分核心能力内化到主分支中,提供原生的 JSON.SET / JSON.GET 语义而无需加载外部模块。这将进一步统一开发者体验,并可能在原子操作层面实现 JSON 路径的 MSET 支持。

4.3 ACL LOG 与审计增强

Redis 7.4 扩展了 ACL LOG 的输出字段,增加了时间戳精度、客户端名称、连接 ID 等维度,并与 Redis Sentinel 的监控体系更紧密集成。对于需要完整审计追踪的金融和医疗行业,这意味着可以用 Redis 原生机制替代外部代理或网络抓包的审计方案。

五、Redis 7.x 性能优化深度分析

5.1 IO Threads 的演进与调优

Redis 6.0 首次引入 IO Threads 时,目标是将网络读写和协议解析从主线程中剥离。Redis 7.0 进一步优化了线程间的任务调度:

# redis.conf IO Threads 配置
io-threads 4                    # IO 线程数,建议设为 CPU 核心数或略少
io-threads-do-reads yes         # IO 线程也处理读取(7.0 默认 yes)

# 验证 IO Threads 是否生效
redis-cli INFO stats | grep io_threaded
# io_threaded_reads_processed: 2839102
# io_threaded_writes_processed: 2910481

IO Threads 的适用边界需要明确:只有当网络带宽或连接数成为瓶颈时,IO Threads 才有正向收益。在以下场景中开启 IO Threads 反而可能降低性能:

  • 小数据量高频查询:Key 和 Value 都很小,网络开销本身不大,多线程切换成本反而拖慢主线程
  • 单连接 Pipeline 场景:Pipeline 已经将网络往返降到极低,IO 线程收益有限
  • CPU 绑定型操作:如复杂 Lua 脚本、大集合运算,瓶颈在 CPU 而非 IO

最佳实践:将 io-threads 设置为服务器 CPU 物理核心数的一半到全部,通过 redis-benchmark 在相同负载下对比开启前后的吞吐量,通常在读多写少、大 Value(>1KB)、高连接数(>1000)的场景收益最明显。官方测试数据显示,在 32 核服务器、100 字节 Value、1000 并发连接下,开启 8 个 IO Thread 的 GET 吞吐量比单线程提升约 70%。

5.2 listpack 带来的 CPU 缓存友好性

除了消除级联更新之外,listpack 的连续存储布局对 CPU 缓存更加友好。ziplist 的 prevlen 字段使得 entry 大小不固定,CPU 在遍历时需要不断回退计算偏移,造成不可预测的分支判断和缓存失效。listpack 中每个 entry 的总长度存储在末尾,CPU 可以按固定 stride 顺序预取,这在 Redis 的 LPOP / RPUSH 高频循环中有可测量的微秒级延迟改善。

5.3 多部分 AOF(MP-AOF)

Redis 7.0 引入了多部分 AOF 机制,将 AOF 文件拆分为基础文件(Base File)和增量文件(Incremental File)。

AOF 目录结构(Redis 7.0+):
appendonlydir/
├── appendonly.aof.1.base.rdb       # 基础数据(RDB 格式)
├── appendonly.aof.1.incr.aof       # 增量命令(AOF 格式)
├── appendonly.aof.2.base.rdb       # 下次重写后生成的新基础文件
└── manifest                        # 索引清单,记录各部分关系

这种结构的收益是多方面的:

  • 重写更安全BGREWRITEAOF 不再需要重写整个单一 AOF 文件,而是生成新的 Base RDB + Incr AOF,原子切换
  • 恢复更快:启动时只需加载最新的 Base RDB,然后从对应的 Incr AOF 回放增量命令
  • 归档灵活:可以独立备份 Base 文件,增量部分按照保留策略清理
# 启用 MP-AOF(Redis 7.0 默认已启用)
aof-use-rdb-preamble yes          # Base 部分使用 RDB 格式
aof-base-size 64mb                # 触发重新生成 Base 文件的阈值

六、从 Redis 6.x 到 7.x 的迁移路径

6.1 升级前检查清单

# 1. 检查当前版本
redis-cli INFO server | grep redis_version

# 2. 检查是否使用了已废弃配置
redis-cli CONFIG GET \*ziplist\*
# 如果有输出,说明存在旧配置,需在升级前替换为 listpack 版本

# 3. 检查 Lua 脚本兼容性
redis-cli SCRIPT LIST | wc -l
# 若使用了大量 Lua 脚本,评估是否需要迁移至 Functions

# 4. 检查 ACL 配置
redis-cli ACL LIST > acl-backup.txt
# 升级后 ACL v2 语法兼容旧版,但建议review是否有Selector优化空间

# 5. RDB/AOF 持久化检查
redis-cli INFO persistence
# 确保 AOF 已开启,升级过程中发生故障可保证数据安全

6.2 滚动升级方案(推荐)

对于使用 Sentinel 或 Cluster 的生产环境,推荐滚动升级:

Sentinel 架构升级流程:

  1. 升级从节点:逐个将从节点的 Redis 二进制替换为 7.x 版本,重启后观察是否成功同步
  2. 执行手动故障转移:sentinel failover mymaster,将已升级的从节点提升为主节点
  3. 升级原主节点:原主节点降为从节点后,替换二进制并重启,观察同步状态
  4. 验证功能:在测试客户端验证 Pub/Sub、Lua 脚本、ACL 行为正常

Cluster 架构升级流程:

  1. 选择影响最小的从节点,替换为 Redis 7.x,重启后加入 Cluster
  2. 逐个将从节点升级完毕
  3. 使用 CLUSTER FAILOVER(强制或优雅)将某个已升级的从节点提升为主节点
  4. 升级被降级的原主节点,循环直至所有节点完成
# 在任意主节点上触发手动故障转移(将指定从节点提升为主)
redis-cli CLUSTER FAILOVER   # 在目标从节点上执行

# 观察集群状态和槽分配
redis-cli CLUSTER NODES
redis-cli CLUSTER SLOTS

6.3 整实例升级注意事项

  • RDB 兼容性:Redis 7.0 的 RDB 版本号为 10,可读取 6.x 的 RDB(版本 9),但 6.x 实例无法读取 7.x 生成的 RDB。因此降级需要重新从备份恢复
  • AOF 兼容性:Redis 7.0 的 MP-AOF 目录结构在 6.x 上不被识别。升级前确保有 RDB 备份,降级时必须清空 AOF 目录并重新构建
  • 内存变化:listpack 的内存占用与 ziplist 接近,但在某些场景下(大量 >254 字节的 entry)listpack 可能比 ziplist 多占用 5-10% 的元数据空间,建议升级前在测试环境进行内存压力测试
  • 命令变更SLAVEOF 在 7.0 中仍支持但已标记废弃,建议统一替换为 REPLICAOFDEBUG 命令的若干子命令被移除或限制

七、兼容性考量与破坏性变更

7.1 Redis 7.0 的 Breaking Changes

变更项影响缓解方案
ziplist 相关配置项废弃hash-max-ziplist-* 等配置被忽略并产生警告替换为 *-max-listpack-* 版本
AOF 文件格式变为目录旧版单文件 appendonly.aof 不再直接生成使用新的 MP-AOF 目录结构,不要手动操作 AOF 文件
Functions 与 SCRIPT 权限分离已有 ACL 中授予 +@scripting 的用户自动获得 Functions 执行权如需限制 Functions,使用 -FCALL 精确控制
部分命令返回值变更ACL LIST 等命令的输出格式微调检查运维脚本和监控解析逻辑
redis-trib.rb 彻底移除6.x 已废弃的集群管理脚本不再附带统一使用 redis-cli --cluster 命令

7.2 客户端兼容性

  • redis-py / go-redis / Jedis:主流客户端在 2022 年后发布的版本均已支持 Redis 7.0 的新命令。务必升级客户端到最新稳定版,否则 FCALLWAITAOFSSUBSCRIBE 等命令将不可用
  • Lettuce:Spring Data Redis 2.7+ 已内置对 Functions 和 Sharded Pub/Sub 的支持
  • RESP3 协议:Redis 7.0 全面默认使用 RESP3,老式 RESP2 客户端仍可连接,但无法使用 RESP3 的新特性(如 Push 消息中的属性字典)

八、特性对比总结表

特性Redis 6.2Redis 7.0Redis 7.2Redis 7.4+
底层紧凑结构ziplistlistpack(替代 ziplist)listpacklistpack
服务端脚本Lua EVAL/EVALSHAFunctions(持久化函数库)FunctionsFunctions
ACL 权限粒度key 前缀 + 命令ACL v2(Selector + 命令类别)ACL v2ACL v2 + 审计增强
Cluster 消息广播全局 Pub/SubSharded Pub/SubSharded Pub/SubSharded Pub/Sub
AOF 持久化单文件 AOFMP-AOF(多部分)MP-AOFMP-AOF
写入同步确认WAIT(仅内存)WAITWAITAOF(AOF fsync)WAITAOF
客户端管理固定 maxclients固定 maxclients客户端驱逐客户端驱逐
多线程 IOIO Threads(6.0+)IO Threads 优化IO Threads 优化IO Threads 优化
排序性能O(N log N)O(N log N)Sortable SET(O(N))Sortable SET
RDB 版本v9v10v10v11(7.4+)
命令数量~200~220~230~240

九、总结与选型建议

Redis 7.x 的演进路线清晰展示了两个核心方向:底层数据结构的持续打磨(listpack 替代 ziplist、MP-AOF、Sortable SET)和服务端能力的平台化(Functions、ACL v2、Sharded Pub/Sub)。

对于不同阶段的团队,升级建议如下:

  • 仍在使用 Redis 5.x 或更早版本:建议制定直接升级到 Redis 7.2 LTS 的路线。Redis 6.x 到 7.x 的数据文件和协议兼容度较高,一次性跨越两个大版本的技术风险可控。
  • 已在使用 Redis 6.2:7.0 的 listpack 和 Functions 值得立即引入,尤其是有共享 Lua 脚本需求的团队。ACL v2 的 Selector 机制可作为安全加固的一部分逐步推广。
  • 大规模 Cluster 用户:Sharded Pub/Sub 是必须评估的特性。如果你的 Cluster Bus 带宽使用率长期处于高位,切换到 Sharded 模型可以带来立竿见影的网络和 CPU 节省。
  • 强一致性要求的金融场景:Redis 7.2 的 WAITAOF 为关键写入操作提供了持久化层的同步确认,可替代部分场景中引入的外部协调方案(如两阶段写入)。

Redis 7.x 不是一次激进的架构革命,而是在 Redis 成熟稳定的基础上,对每个生产痛点进行了精准的工程优化。理解并善用这些新特性,将帮助你在高并发、高可用的生产环境中更好地驾驭 Redis 这一基础设施。


延伸阅读

继续阅读

探索更多技术文章

浏览归档,发现更多关于系统设计、工具链和工程实践的内容。

全部文章 返回首页

「database」更多文章

  1. 缓存架构演进之路:从单机 Redis 到亿级分布式多级缓存体系
  2. Redis 消息队列深度对比:Pub/Sub、Streams 与 Kafka/RabbitMQ 选型指南
  3. Redis 数据迁移与集群扩容:从单节点到分布式的大规模迁移实战