list操作 rediscluster_Redis集群批量操作
/*** 根据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集群批量操作相关推荐
- 如何创建一个用户、授权操作k8s集群的过程?
本篇带给大家如何创建一个用户.授权操作k8s集群的过程.希望对你有所帮助! 背景 172.16.99.128是的我k8s集群的master节点,此处是从这里获取集群的证书. 创建访问architech ...
- python操作redis集群_python 连接管理作redis集群
python的redis库是不支持集群操作的,推荐库:redis-py-cluster. 安装 pip3 install redis-py-cluster 连接redis集群 #!/usr/bin/e ...
- python 操作redis集群
python 操作redis集群 一.连接redis集群 python的redis库是不支持集群操作的,推荐库:redis-py-cluster,一直在维护.还有一个rediscluster库,看Gi ...
- 在IDEA中创建maven项目编写java代码操作HDFS集群
一.安装win10编译过的hadoop 1.将编译好的hadoop包放在非中文目录 2.配置HADOOP_HOME环境变量 3.将hadoop包的bin目录加到PATH环境变量中 二.在idea中创建 ...
- 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 ...
- python操作redis集群_python操作redis集群
strictRedis对象方法用于连接redis 指定主机地址,port与服务器连接,默认db是0,redis默认数据库有16个,在配置文件中指定database 16 上代码 1.对redis的单实 ...
- 淘淘商城23_Linux上的操作_solr集群的搭建、zookeeper集群的搭建
安装包链接: 百度网盘: 链接:https://pan.baidu.com/s/13m_kjoZiN2cVH_nIGs0a9w 提取码:be17 一.概念理解 1. 什么是SolrCloud Sol ...
- etcdctl-管理操作etcd集群
一.简介 etcd就是个分布式非关系型数据库. 3 个节点组成的集群,可以容忍 1 个节点故障. 生成环境中,不推荐使用单个节点的 etcd 集群. etcd 支持存储多个版本的数据,允许查询指定 k ...
- 代码操作redis集群报错:(error) MOVED 解决方法
记录一下今天搭建完本地redis集群以后,使用C++代码测试redis集群搭建是否成功. 在初始化.链接等一系列成功后,我开开心心进行写操作: 这时候报错: Run 382 Redis Set Err ...
最新文章
- python 自定义模块_Python 自定义模块路径
- 在.NET中获取一台电脑名,IP地址及当前用户名
- 基于nginx和ffmpeg前端flv.js简单的直播环境搭建(rtmp+http-flv+hls)
- 2020-11-5(安卓)
- SRS流媒体服务器——单机环境搭建和源码目录介绍
- mysql导到相对位置_MySQL数据备份与恢复
- quinlan的C4.5编译
- 《SAS编程与数据挖掘商业案例》学习笔记之十四
- 用python画明星_用python画一只可爱的皮卡丘实例
- mysql为何不支持开窗函数?
- 使用cmd命令创建vue(ivieiw)项目
- Java学生管理系统-增删改查
- 邱锡鹏DL经典教材-《神经网络与深度学习》
- paraview使用GUI连接服务器
- 【CentOS 7 】密码破解与防破解
- 读 Charles Petzold 之《编码:隐匿在计算机软硬件背后的语言》
- Vibrant Ink Theme for IntelliJ IDEA
- 今日推荐:2068个开源的网站模板【免费下载】
- DDD(Domain-Driven Design)领域驱动架构介绍
- 我发现智能无人机课程里面讲了无人机建模这方面的理论知识
热门文章
- 百度NeurIPS全球顶会冠军团队,带你7日从零实践强化学习
- “非自回归”也不差:基于MLM的阅读理解问答
- RealNVP与Glow:流模型的传承与升华
- 使用PaddleFluid和TensorFlow训练RNN语言模型
- 本期最新 9 篇论文,帮你完美解决「读什么」的问题 | PaperDaily #19
- 丑憨批的爬虫笔记6实例
- 实战 es6_Node.JS实战65:ES6新特性:箭头函数
- 【大白话系列】深入浅出Cleaner+虚引用完成堆外内存的回收
- C#——判断数列是否排序
- Divide it!