网站Logo 苏叶的belog

批处理优化

wdadwa
1
2026-03-26

一,Pipline

1.1 为什么要优化批处理

单个命令的执行流程:

2953321-20240820191258277-1570815700.png

N 条命令依次执行流程:

2953321-20240820191258289-1214749999.png

N 条命令批量执行:

2953321-20240820191258207-551277571.png

1.2 Pipeline介绍

2953321-20240820191258282-1149131467.png


2953321-20240820191258372-1150786523.png

Pipeline 的多个命令之间不具备原子性

二,集群下的批处理

如 MSET 或者 Pipeline 这样的批处理需要在一次请求中携带多条命令,而此时如果 Redis 是一个集群,那批处理命令的多个 key 必须落在同一个插槽中,否则就会执行失败。

解决办法:

2953321-20240820191258296-189419429.png

hash_tag 就是 key 的有效部分,例如:name 那么 tag 就是根据 name 计算,{a}name 那么就是根据 a 来计算

这个就叫 hash_tag

我们StringRedisTemplate.opsForValue().multiSet(map)底层会采用第三种,并行 slot 方式实现的,类似的,获取也可以multiGet

动物装饰