1. 作用:实现分布式缓存
原理:通过一致性哈希实现,通过一定策略把不同的key分配到不同的redis server上,达到横向拓展目的。
2. 使用方法:不支持多命令操作,不可以和MultiKeyCommands这个类一样,同时操作多个命令。
3. 代码操作:
3.1 初始化ShardedJedisPool,加入多个Redis服务器信息,还可以加入采用的算法,包括MURMUR_HASH(默认)和MD5,还可以传入keyTagPattern。
//设置连接池相关配置 JedisPoolConfig poolConfig = new JedisPoolConfig(); poolConfig.setMaxTotal(2); poolConfig.setMaxIdle(1); poolConfig.setMaxWaitMillis(2000); poolConfig.setTestOnBorrow(false); poolConfig.setTestOnReturn(false); //设置Redis信息 String host = "localhost"; JedisShardInfo shardInfo1 = new JedisShardInfo(host, 6379, 500); JedisShardInfo shardInfo2 = new JedisShardInfo(host, 6380, 500); JedisShardInfo shardInfo3 = new JedisShardInfo(host, 6381, 500); //初始化ShardedJedisPool List<JedisShardInfo> infoList = Arrays.asList(shardInfo1, shardInfo2, shardInfo3); ShardedJedisPool jedisPool = new ShardedJedisPool(poolConfig,infoList);
3.2 测试:
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(); 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());
3.3 查看key的保存位置