Redis集群进行批量操作的几种方式

参考 
《redis并发与运维》
串行命令由于n个key是比较均匀的分布在Redis Cluster的各个节点上,因此无法使用mget命令一次性获取,所以通常来讲要获取n个key的值,最简单的方法就是逐次执行n个get命令,这种操作的时间复杂度较高,它的操作时间 = n次网络时间 + n次命令时间,网络次数是n 。很显然这种方案不是最优的,但是实现起来比较简单 。
串行IORedis Cluster使用CRC16算法计算出散列值,再取对16383的余数就可以算出slot值,同时我们可以使用Smart客户端保存slot和节点的对应关系,有了这两个数据就可以将属于同一个节点的key进行归档,得到每个节点的key子列表,之后对每个节点执行mget或Pipeline操作,它的操作时间 = node次网络时间 + n次命令时间,网络次数是node的个数,很明显这种方案比第一种要好很多,但是如果节点数太多,还是有一定的性能问题 。
并行IO此方案是将方案2中的最后一步改为多线程执行,网络次数虽然还是节点个数,但由于使用多线程网络时间变为O(1),这种方案会增加编程的复杂度 。它的操作时间为:

max_slow(node网络时间) + n次命令时间
hash_tag实现【Redis集群进行批量操作的几种方式】Redis Cluster提供了hash_tag功能,可以将多个key强制分配到一个节点上,它的操作时间 = 1次网络时间 + n次命令时间 。
总结
Redis集群进行批量操作的几种方式

文章插图
批量操作方案对比




    推荐阅读