Redis集群是没法执行批量操作命令的,如mget,pipeline等。这是因为redis将集群划分为16383个哈希槽,不同的key会划分到不同的槽中。原生JedisCluster对批量操作的限制是mget mset 必须在一个槽;
四种批量优化的方法
1、串行 mget
- 在 for 循环中执行一条条的 get;
- 需要 n 次网络时间;
2、串行 IO
- 在客户端对所有 key 做 CRC16(key) % 16384 计算出 key 所属的 slot,在把所有的 key 根据 node 分组,对每个分组执行一个 pipeline 操作;
3、并行 IO
- 就是对串行 IO 的分组,用多线程 pipeline;
4、hash_tag
- 所有的键值用一个 tag 包装,一次性发往一个节点,批量取的时候从一个节点一次性取出来;
https://blog.csdn.net/qq_30431719/article/details/81171430
https://www.jianshu.com/p/22aa8efaec8f
https://blog.csdn.net/Jinlu_npu/article/details/79744689
https://www.jianshu.com/p/75137d23ae4a