你的位置:首页 > 软件开发 > Java > Jedis下的ShardedJedis(分布式)使用方法(一)

Jedis下的ShardedJedis(分布式)使用方法(一)

发布时间:2015-11-29 16:00:30
原来项目中有用到Redis用作缓存服务,刚开始时只用一台Redis就能够满足服务,随着项目的慢慢进行,发现一台满足不了现有的项目需求,因为Redis操作都是原子性这样的特性,造成有时同时读写缓存造成查询效率的下降。但是由于我们现在用的还是2.X版本,还是没有集群功能的(Redis ...

原来项目中有用到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 {       //使用后一定关闭,还给连接池    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()); 

 

海外公司注册、海外银行开户、跨境平台代入驻、VAT、EPR等知识和在线办理:https://www.xlkjsw.com

原标题:Jedis下的ShardedJedis(分布式)使用方法(一)

关键词:

*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。

可能感兴趣文章

我的浏览记录