/*** 根据key计算slot,

* 再根据slot计算node,

* 获取pipeline

* 进行批量操作*/

public classBatchUtil {public static Mapmget(JedisCluster jc, String... keys){

Map resMap = new HashMap<>();if(keys == null || keys.length == 0){returnresMap;

}//如果只有一条,直接使用get即可

if(keys.length == 1){

resMap.put(keys[0], jc.get(keys[0]));returnresMap;

}//JedisCluster继承了BinaryJedisCluster//BinaryJedisCluster的JedisClusterConnectionHandler属性//里面有JedisClusterInfoCache,根据这一条继承链,可以获取到JedisClusterInfoCache//从而获取slot和JedisPool直接的映射

MetaObject metaObject =SystemMetaObject.forObject(jc);

JedisClusterInfoCache cache= (JedisClusterInfoCache) metaObject.getValue("connectionHandler.cache");//保存地址+端口和命令的映射

Map> jedisPoolMap = new HashMap<>();

List keyList = null;

JedisPool currentJedisPool= null;

Pipeline currentPipeline= null;for(String key : keys){//计算哈希槽

int crc =JedisClusterCRC16.getSlot(key);//通过哈希槽获取节点的连接

currentJedisPool =cache.getSlotPool(crc);//由于JedisPool作为value保存在JedisClusterInfoCache中的一个map对象中,每个节点的//JedisPool在map的初始化阶段就是确定的和唯一的,所以获取到的每个节点的JedisPool都是一样//的,可以作为map的key

if(jedisPoolMap.containsKey(currentJedisPool)){

jedisPoolMap.get(currentJedisPool).add(key);

}else{

keyList= new ArrayList<>();

keyList.add(key);

jedisPoolMap.put(currentJedisPool, keyList);

}

}//保存结果

List res = new ArrayList<>();//执行

for(Entry>entry : jedisPoolMap.entrySet()){try{

currentJedisPool=entry.getKey();

keyList=entry.getValue();//获取pipeline

currentPipeline =currentJedisPool.getResource().pipelined();for(String key : keyList){

currentPipeline.get(key);

}//从pipeline中获取结果

res =currentPipeline.syncAndReturnAll();

currentPipeline.close();for(int i=0; i

resMap.put(keyList.get(i), res.get(i)==null? null: res.get(i).toString());

}

}catch(Exception e) {

e.printStackTrace();return new HashMap<>();

}

}returnresMap;

}

}

list操作 rediscluster_Redis集群批量操作相关推荐

  1. 如何创建一个用户、授权操作k8s集群的过程?

    本篇带给大家如何创建一个用户.授权操作k8s集群的过程.希望对你有所帮助! 背景 172.16.99.128是的我k8s集群的master节点,此处是从这里获取集群的证书. 创建访问architech ...

  2. python操作redis集群_python 连接管理作redis集群

    python的redis库是不支持集群操作的,推荐库:redis-py-cluster. 安装 pip3 install redis-py-cluster 连接redis集群 #!/usr/bin/e ...

  3. python 操作redis集群

    python 操作redis集群 一.连接redis集群 python的redis库是不支持集群操作的,推荐库:redis-py-cluster,一直在维护.还有一个rediscluster库,看Gi ...

  4. 在IDEA中创建maven项目编写java代码操作HDFS集群

    一.安装win10编译过的hadoop 1.将编译好的hadoop包放在非中文目录 2.配置HADOOP_HOME环境变量 3.将hadoop包的bin目录加到PATH环境变量中 二.在idea中创建 ...

  5. python连接es数据库_Python Elasticsearch API操作ES集群

    环境Centos 7.4 Python 2.7 Pip 2.7 MySQL-python 1.2.5 Elasticsearc 6.3.1 Elasitcsearch6.3.2 知识点调用Python ...

  6. python操作redis集群_python操作redis集群

    strictRedis对象方法用于连接redis 指定主机地址,port与服务器连接,默认db是0,redis默认数据库有16个,在配置文件中指定database 16 上代码 1.对redis的单实 ...

  7. 淘淘商城23_Linux上的操作_solr集群的搭建、zookeeper集群的搭建

    安装包链接: 百度网盘: 链接:https://pan.baidu.com/s/13m_kjoZiN2cVH_nIGs0a9w  提取码:be17 一.概念理解 1. 什么是SolrCloud Sol ...

  8. etcdctl-管理操作etcd集群

    一.简介 etcd就是个分布式非关系型数据库. 3 个节点组成的集群,可以容忍 1 个节点故障. 生成环境中,不推荐使用单个节点的 etcd 集群. etcd 支持存储多个版本的数据,允许查询指定 k ...

  9. 代码操作redis集群报错:(error) MOVED 解决方法

    记录一下今天搭建完本地redis集群以后,使用C++代码测试redis集群搭建是否成功. 在初始化.链接等一系列成功后,我开开心心进行写操作: 这时候报错: Run 382 Redis Set Err ...

最新文章

  1. python 自定义模块_Python 自定义模块路径
  2. 在.NET中获取一台电脑名,IP地址及当前用户名
  3. 基于nginx和ffmpeg前端flv.js简单的直播环境搭建(rtmp+http-flv+hls)
  4. 2020-11-5(安卓)
  5. SRS流媒体服务器——单机环境搭建和源码目录介绍
  6. mysql导到相对位置_MySQL数据备份与恢复
  7. quinlan的C4.5编译
  8. 《SAS编程与数据挖掘商业案例》学习笔记之十四
  9. 用python画明星_用python画一只可爱的皮卡丘实例
  10. mysql为何不支持开窗函数?
  11. 使用cmd命令创建vue(ivieiw)项目
  12. Java学生管理系统-增删改查
  13. 邱锡鹏DL经典教材-《神经网络与深度学习》
  14. paraview使用GUI连接服务器
  15. 【CentOS 7 】密码破解与防破解
  16. 读 Charles Petzold 之《编码:隐匿在计算机软硬件背后的语言》
  17. Vibrant Ink Theme for IntelliJ IDEA
  18. 今日推荐:2068个开源的网站模板【免费下载】
  19. DDD(Domain-Driven Design)领域驱动架构介绍
  20. 我发现智能无人机课程里面讲了无人机建模这方面的理论知识

热门文章

  1. 百度NeurIPS全球顶会冠军团队,带你7日从零实践强化学习
  2. “非自回归”也不差:基于MLM的阅读理解问答
  3. RealNVP与Glow:流模型的传承与升华
  4. 使用PaddleFluid和TensorFlow训练RNN语言模型
  5. 本期最新 9 篇论文,帮你完美解决「读什么」的问题 | PaperDaily #19
  6. 丑憨批的爬虫笔记6实例
  7. 实战 es6_Node.JS实战65:ES6新特性:箭头函数
  8. 【大白话系列】深入浅出Cleaner+虚引用完成堆外内存的回收
  9. C#——判断数列是否排序
  10. Divide it!