参考
《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内存优化
- ?进行乳房脓肿穿刺术要注意什么
- redis sds 介绍
- Redis两种持久化机制RDB和AOF详解
- 阿里架构师教你处理高并发:2种方法,解决Redis和Mysql一致性
- 只要一个IP,就能进行nmap“脚本”扫描
- 开启IPv6,让你的局域网可以使用IPV6进行共享文件夹的访问
- 如何进行阿里云ssl证书申请?zblogphp如何开启https?
- 如何进行 web 性能监控,你的方法用对了吗?
- Redis-消息队列的两种实现方式