<返回更多

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

2020-01-13    
加入收藏

参考

 

redis并发与运维》

串行命令

由于n个key是比较均匀的分布在Redis Cluster的各个节点上,因此无法使用mget命令一次性获取,所以通常来讲要获取n个key的值,最简单的方法就是逐次执行n个get命令,这种操作的时间复杂度较高,它的操作时间 = n次网络时间 + n次命令时间,网络次数是n。很显然这种方案不是最优的,但是实现起来比较简单。

串行IO

Redis Cluster使用CRC16算法计算出散列值,再取对16383的余数就可以算出slot值,同时我们可以使用Smart客户端保存slot和节点的对应关系,有了这两个数据就可以将属于同一个节点的key进行归档,得到每个节点的key子列表,之后对每个节点执行mget或Pipeline操作,它的操作时间 = node次网络时间 + n次命令时间,网络次数是node的个数,很明显这种方案比第一种要好很多,但是如果节点数太多,还是有一定的性能问题。

并行IO

此方案是将方案2中的最后一步改为多线程执行,网络次数虽然还是节点个数,但由于使用多线程网络时间变为O(1),这种方案会增加编程的复杂度。它的操作时间为:

max_slow(node网络时间) + n次命令时间

hash_tag实现

Redis Cluster提供了hash_tag功能,可以将多个key强制分配到一个节点上,它的操作时间 = 1次网络时间 + n次命令时间。

总结

批量操作方案对比

声明:本站部分内容来自互联网,如有版权侵犯或其他问题请与我们联系,我们将立即删除或处理。
▍相关推荐
更多资讯 >>>