redis--批次处理

一、基础原理

1. 单条命令执行流程

客户端发送命令 → Redis 服务端执行 → 返回结果。一次1 次网络往返。

2. 串行 N 条命令(普通 for 循环逐条执行)

公式:总耗时 = N次网络往返耗时 + N次命令执行耗时 缺点:大量网络 IO,性能极差。

3. MSET 和 Pipeline 批量方案

  • MSET:Redis 内置批量命令,一次性写入多个 key-value;只能操作 String 类型,类似还有 HMSET(hash)。
  • Pipeline(管道) :客户端把多条命令缓存,一次性发给 Redis,服务端依次执行,一次性返回全部结果。支持所有 Redis 命令、所有数据类型,通用性更强。

核心共同点:一次网络往返,减少网络开销。

二、集群环境的致命限制

Redis Cluster 有 16384 个 slot(插槽),key 根据 hash 计算落到对应 slot,不同 slot 可能在不同节点。

✅ 规则:MSET / Pipeline 一次请求里的所有 key,必须落在同一个 slot,否则直接报错执行失败 。 原因:集群一次请求只能发给一个 Redis 节点,key 跨 slot 就分布在不同节点,节点无法处理不属于自己 slot 的 key。

三、4 种集群批量写入方案对比

表格

方案 实现思路 耗时 优点 缺点
串行命令 for 循环遍历,逐条执行命令 N 次网络耗时 + N 次命令耗时 实现最简单 网络次数多,耗时非常久
串行 slot 客户端预计算每个 key 的 slot,按 slot 分组;同一 slot 的 key 用 Pipeline 批量,分组串行执行 m 次网络耗时 + N 次命令耗时m=slot 分组数量 耗时较短 实现稍复杂;slot 分组越多,耗时越长
并行 slot 客户端预计算 slot 分组,多线程并行执行各组 Pipeline 1 次网络耗时 + N 次命令耗时 耗时极短 代码逻辑复杂,需要多线程处理
hash_tag 给所有 key 设置相同 hash_tag({tag}key),强制所有 key 落到同一个 slot 1 次网络耗时 + N 次命令耗时 耗时极短、代码简单 容易数据倾斜,所有 key 压在同一个节点,负载不均衡

hash_tag 原理:{xxx}key1,只会对{}内的内容做 hash 计算 slot,{user}1、{user}2slot 完全相同。

相关推荐
夕除1 天前
redis--内存淘汰
redis
莫晓燚1 天前
阿里云若依项目部署与日志采集---实战
运维·数据库·redis·阿里云·ruoyi
MaAidan2 天前
让 Agent 接上 YApi、Yuque、数据库、Redis 和日志:我的 MCP 资源绑定设计
数据库·redis·缓存
pikapika~~~2 天前
Mysql+Redis八股
数据库·redis·mysql
IT规划师2 天前
Redis 数据类型全解 - Hash 还是 String + JSON?一文终结存储选型之争(三)
redis·.net core·哈希表·.net10
夕除2 天前
Redis 过期策略
redis·笔记·面试
莫晓燚2 天前
双机部署若依 (RuoYi‑Vue) 传统环境部署---实战
linux·运维·数据库·redis·mysql·nginx·ruoyi
夕除2 天前
redis--resp
redis