专业网站建设的公司排名,网站建设需要,百度竞价托管费用,wordpress微信h5支付宝背景#xff1a;
redis集群不支持客户端的mget操作#xff0c;但是业务上对这个redis集群的批量操作的需求一直都在#xff0c;所以有各种客户端实现了各式各样的pineline实现,本文就记录下我们公司的实现方式
pineline实现思路
1.pineline要快
pineline之所以快是因为可…背景
redis集群不支持客户端的mget操作但是业务上对这个redis集群的批量操作的需求一直都在所以有各种客户端实现了各式各样的pineline实现,本文就记录下我们公司的实现方式
pineline实现思路
1.pineline要快
pineline之所以快是因为可以使用并行而之前只能是串行的方式如下图所示
对应pineline伪代码实现
for(key : keys){1. jedis 获取key所在的slot对应的redis实例的连接2.jedis.send(命令)只发送不接收结果返回Feturekey}for(Feturekey: futures){1.feture.get获取结果}最终的就能达到并行的目的大大节省了操作耗时
2.pineline遇到redis集群扩容时要有兜底
pineline虽然使用并行的方式会比较快但是这样有一个问题如果某个key在获取的过程中发生重定向异常怎么办我们应该有兜底的策略最简单的兜底策略就是回退到单个key一个个串行获取的方式虽然性能收到影响但是至少数据能正确获取到,示意图参见
对应pineline兜底伪代码实现:
try{}catch(重定向异常){for(key : keys){1. jedis 获取key所在的slot对应的redis实例的连接2.jedis.send(命令)wait等待获取结果jedis.getResult()}}直接通过串行的单个请求响应的方式获取这一批key的返回值即可
总结
实现redis集群客户端的pineline操作需要考虑到要快并且能在redis集群扩容的情况下进行兜底