Redis集群下批处理-串行化执行代码实践
当在Redis集群模式下,我们就不能使用mset和pipeline了。因为分片集群下,插槽是根据key算出来的,不同的key算出的slot不同,slot不同的话,可能Redis实例节点也不是一个,所以,不能直接使用mset或者pipeline了。第二种方案:串行slot,简单来说,就是执行前,客户端先计算一下对应的key的slot,一样slot的key就放到一个组里边,不同的,就放到不同的组里边,
当在Redis集群模式下,我们就不能使用mset和pipeline了。因为分片集群下,插槽是根据key算出来的,不同的key算出的slot不同,slot不同的话,可能Redis实例节点也不是一个,所以,不能直接使用mset或者pipeline了。
第二种方案:串行slot,简单来说,就是执行前,客户端先计算一下对应的key的slot,一样slot的key就放到一个组里边,不同的,就放到不同的组里边,然后对每个组执行pipeline的批处理,他就能串行执行各个组的命令,这种做法比第一种方法耗时要少,但是缺点呢,相对来说复杂一点,所以这种方案还需要优化一下。
import org.springframework.data.redis.connection.ClusterSlotHashUtil;
import org.springframework.data.redis.core.StringRedisTemplate;
import redis.clients.jedis.HostAndPort;
import redis.clients.jedis.JedisCluster;
import redis.clients.jedis.JedisPoolConfig;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import javax.annotation.Resource;
import java.util.*;
import java.util.stream.Collectors;
public class JedisClusterTest {
private JedisCluster jedisCluster;
@Resource
private StringRedisTemplate stringRedisTemplate;
@BeforeEach
void setUp() {
// 配置连接池
JedisPoolConfig poolConfig = new JedisPoolConfig(原创不易,完成人机校验,阅读全文