Jedis下的ShardedJedis(分布式)使用方法(一)
原来项目中有用到Redis用作缓存服务,刚开始时只用一台Redis就能够满足服务,随着项目的慢慢进行,发现一台满足不了现有的项目需求,因为Redis操作都是原子性这样的特性,造成有时同时读写缓存造成查询效率的下降。但是由于我们现在用的还是2.X版本,还是没有集群功能的(Redis作者在3.0版本中已经加入了集群功能), 因此只能使用2.x版本中自带的一个叫做ShardedJedis的来实现分布式缓存。
ShardedJedis是通过一致性哈希来实现分布式缓存的,通过一定的策略把不同的key分配到不同的redis server上,达到横向扩展的目的。那么ShardedJedis内部是怎么实现的呢,文章会慢慢讲解。
1.ShardedJedis使用方法
ShardedJedis的使用方法除了配置时有点区别,其他和Jedis基本类似,有一点要注意的是 ShardedJedis不支持多命令操作,像mget、mset、brpop等可以在redis命令后一次性操作多个key的命令,具体包括哪些,大家可以看Jedis下的 MultiKeyCommands 这个类,这里面就包含了所有的多命令操作。很贴心的是,Redis作者已经把这些命令从ShardedJedis过滤掉了,使用时也调用不了这些方法,大家知道下就行了。
好了,现在来看基本的使用
//设置连接池的相关配置
JedisPoolConfig poolConfig = new JedisPoolConfig();
poolConfig.setMaxTotal(2);
poolConfig.setMaxIdle(1);
poolConfig.setMaxWaitMillis(2000);
poolConfig.setTestOnBorrow(false);
poolConfig.setTestOnReturn(false); //设置Redis信息
String host = "127.0.0.1";
JedisShardInfo shardInfo1 = new JedisShardInfo(host, 6379, 500);
shardInfo1.setPassword("test123");
JedisShardInfo shardInfo2 = new JedisShardInfo(host, 6380, 500);
shardInfo2.setPassword("test123");
JedisShardInfo shardInfo3 = new JedisShardInfo(host, 6381, 500);
shardInfo3.setPassword("test123"); //初始化ShardedJedisPool
List<JedisShardInfo> infoList = Arrays.asList(shardInfo1, shardInfo2, shardInfo3);
ShardedJedisPool jedisPool = new ShardedJedisPool(poolConfig, infoList); //进行查询等其他操作
ShardedJedis jedis = null;
try {
jedis = jedisPool.getResource();
jedis.set("test", "test");
jedis.set("test1", "test1");
String test = jedis.get("test");
System.out.println(test);
......
} finally {
//使用后一定关闭,还给连接池
if(jedis!=null) {
jedis.close();
}
}
jedis获取后一定要关闭,这和我们使用数据库连接池是一样的,放在finally块中保证jedis的关闭.
ps:如果大家使用的jdk是1.7版本或者以上的话,可以使用1.7加入的try-with-resources语句
try(ShardedJedis jedis = jedisPool.getResource()) {
jedis.set("test", "test");
jedis.set("test1", "test1");
String test = jedis.get("test");
System.out.println(test);
}
try-with-resources的效果和我们上面写法是一样的,只是jedis.close()语法它会帮我们调用,它会默认调用我们在try-with-resources语句中声明的,实现了Closeable 接口的对象的close方法(像上面的ShardedJedis),我们经常用到的数据库连接Connection和一些输入输出流都可以使用这种方法。
从代码上看,除了初始化ShardedJedisPool时需要加入多个Redis服务器信息,其他的和Jedis使用差不多。
在初始化ShardedJedisPool 时,我们还可以传入ShardedJedis采用的hash算法,支持MURMUR_HASH 和MD5两种算法,默认是使用MURMUR_HASH(可以查看redis.clients.util.Hashing 类查看相关的信息)
另外还可以传入keyTagPattern来指定我们key的分布策略,所有能够匹配keyTagPattern的key(通过正则匹配)将放在同一个redis里,默认的是直接使用key来进行判定。Redis自带了一个Sharded.keyTagPattern,如下
Pattern DEFAULT_KEY_TAG_PATTERN = Pattern.compile("\\{(.+?)\\}");
我们可以用下面的代码来实际测试下
ShardedJedis jedis = jedisPool.getResource(); jedis.set("cnblog", "cnblog");
jedis.set("redis", "redis");
jedis.set("test", "test");
jedis.set("123456", "1234567");
Client client1 = jedis.getShard("cnblog").getClient();
Client client2 = jedis.getShard("redis").getClient();
Client client3 = jedis.getShard("test").getClient();
Client client4 = jedis.getShard("123456").getClient(); ////打印key在哪个server中
System.out.println("cnblog in server:" + client1.getHost() + " and port is:" + client1.getPort());
System.out.println("redis in server:" + client2.getHost() + " and port is:" + client2.getPort());
System.out.println("test in server:" + client3.getHost() + " and port is:" + client3.getPort());
System.out.println("123456 in server:" + client4.getHost() + " and port is:" + client4.getPort());
看输出内容:
aaarticlea/png;base64,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" alt="" />
可以看到我们保存的4个key,cnblog和redis在同一个redis server中,另外两个分别在另外的redis server中。
ShardedJedis里面采用了一致性哈希的算法,来决定每个key的保存位置,具体是怎么样计算的,在下一篇中会研究下Jedis的源码来看看。
Jedis下的ShardedJedis(分布式)使用方法(一)的更多相关文章
- Jedis下的ShardedJedis(分布式)使用方法(二)
上一篇中介绍了ShardedJedis的基本使用方法以及演示了一个简单的例子,在这一篇中我们来介绍了ShardedJedis的原理. 1.ShardedJedis内部实现 首先我们来看一下Sharde ...
- Jedis下的ShardedJedis
jedis客户端操作redis主要三种模式:单台模式.分片模式(ShardedJedis).集群模式(BinaryJedisCluster) ShardedJedis是通过一致性哈希来实现分布式缓存的 ...
- hadoop2.2.0+hive-0.10.0完全分布式安装方法
hadoop+hive-0.10.0完全分布式安装方法 1.jdk版本:jdk-7u60-linux-x64.tar.gz http://www.oracle.com/technetwork/cn/j ...
- was集群下基于接口分布式架构和开发经验谈
版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/luozhonghua2014/article/details/34084935 某b项目是我首 ...
- 3dmax联机分布式渲染方法技巧详解
3dmax联机分布式渲染方法技巧详解 \测试环境:win7系统 3DMAX2009 Vray2.0 .首先要保证你的两台电脑能在局域网里互相访问如图: 其他电脑上也一样都能打开对方的电脑! 步! ...
- Linux下清理内存和Cache方法 /proc/sys/vm/drop_caches
Linux下清理内存和Cache方法 /proc/sys/vm/drop_caches 频繁的文件访问会导致系统的Cache使用量大增 $ free -m total used free shared ...
- linux系统下yum 安装mysql的方法
菜鸟一个,记录下yum 安装mysql的方法,给需要的朋友也做个参考吧. 弄了个新vps,想安装最新版的mysql,网上查了相关资料,记录如下: 1.安装查看有没有安装过: yum ...
- Linux下Git和GitHub使用方法总结
来源:Linux下Git和GitHub使用方法总结 1 Linux下Git和GitHub环境的搭建 第一步: 安装Git,使用命令 “sudo apt-get install git” 第二步: 到G ...
- Ubuntu下deb包的安装方法 (zz)
Ubuntu下deb包的安装方法 分类: Ubuntu10使用技巧 2010-10-11 23:49 42969人阅读 评论(3) 收藏 举报 ubuntudebdebianlinux deb是deb ...
随机推荐
- kindeditor-在线编辑器
写在前面的话: 今天是第一次写博客,很值得纪念,希望能够和大神们一起交流技术,一起进步...来自<一只有梦想的前端小白> 最近项目中需要实现图文混排的效果,所以研究了下在线编辑器-- ki ...
- JavaScript小例子:复选框全选
JavaScript小例子:复选框全选 这只是一个小例子,很简单,但是这个功能还是很常用的: 实现后效果如图: JavaScript代码: <script type="text/jav ...
- Android 6.0权限全面详细分析和解决方案
原文: http://www.2cto.com/kf/201512/455888.html http://blog.csdn.net/yangqingqo/article/details/483711 ...
- Android 显示意图激活另外一个Actitity
1.跳转到一个新的Actitity 新建项目, 新建一个java类OtherScreenActivity 继承自 Activity类 package com.wuyudong.twoactivity; ...
- 【代码笔记】iOS-点击任何处,出现城市
一,效果图. 二,工程目录. 三,代码. //点击任何处,出现城市 -(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { ...
- CoreData的使用
#import "ViewController.h" #import "Person.h" @interface ViewController () <U ...
- UILabel和NSAttributedString那些事
注:通常的label用来现实普通的文字.但是,你常常会遇到这样的情况:一段文字中不仅有文字,也有图片,甚至文字中的某段文字与其他的文字的appearance不一致的情况,这样的一段文字就可以称得上是富 ...
- Cookie/Session机制
这些都是基础知识,不过有必要做深入了解.先简单介绍一下. 二者的定义: 当你在浏览网站的时候,WEB 服务器会先送一小小资料放在你的计算机上,Cookie 会帮你在网站上所打的文字或是一些选择, 都纪 ...
- jQuery代码优化:事件委托篇
推荐阅读原文:http://www.ituring.com.cn/article/467# 推荐11收藏 随着DOM结构的复杂化和Ajax等动态脚本技术的运用,事件委托自然浮出了水面.jQuery为绑 ...
- 驳 GarbageMan 的《一个超复杂的简介递归》——对延迟计算的实验和思考
这是一篇因骂战而起的博文,GarbageMan 在该文章回复中不仅对我进行了侮辱,还涉及了我的母校,特写此文用理性的分析和实验予以回击. 在此也劝告 GarbageMan,没什么本事就别在那叫嚣了,还 ...