<dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>2.0.0</version> <type>jar</type> <scope>compile</scope> </dependency>
#最大分配的对象数 redis.pool.maxActive=1024 #最大能够保持idel状态的对象数 redis.pool.maxIdle=200 #当池内没有返回对象时,最大等待时间 redis.pool.maxWait=1000 #当调用borrow Object方法时,是否进行有效性检查 redis.pool.testOnBorrow=true #当调用return Object方法时,是否进行有效性检查 redis.pool.testOnReturn=true #IP redis.ip=10.11.20.140 #Port redis.port=6379
private static JedisPool pool; static { ResourceBundle bundle = ResourceBundle.getBundle("redis"); if (bundle == null) { throw new IllegalArgumentException( "[redis.properties] is not found!"); } JedisPoolConfig config = new JedisPoolConfig(); config.setMaxActive(Integer.valueOf(bundle .getString("redis.pool.maxActive"))); config.setMaxIdle(Integer.valueOf(bundle .getString("redis.pool.maxIdle"))); config.setMaxWait(Long.valueOf(bundle.getString("redis.pool.maxWait"))); config.setTestOnBorrow(Boolean.valueOf(bundle .getString("redis.pool.testOnBorrow"))); config.setTestOnReturn(Boolean.valueOf(bundle .getString("redis.pool.testOnReturn"))); pool = new JedisPool(config, bundle.getString("redis.ip"), Integer.valueOf(bundle.getString("redis.port"))); }
// 从池中获取一个Jedis对象 Jedis jedis = pool.getResource(); String keys = "name"; // 删数据 jedis.del(keys); // 存数据 jedis.set(keys, "snowolf"); // 取数据 String value = jedis.get(keys); System.out.println(value); // 释放对象池 pool.returnResource(jedis);
PS:Memcached是在Server端完成Sharding,Redis只能依靠各个Client做Sharding。可能会在Redis 3.0系列支持Server端Sharding。
保留前面的JedisPoolConfig,新增两个Redis的IP(redis1.ip,redis2.ip),完成两个JedisShardInfo实例,并将其丢进List中:
JedisShardInfo jedisShardInfo1 = new JedisShardInfo(bundle.getString("redis1.ip"), Integer.valueOf(bundle .getString("redis.port"))); JedisShardInfo jedisShardInfo2 = new JedisShardInfo(bundle.getString("redis2.ip"), Integer.valueOf(bundle .getString("redis.port"))); List<JedisShardInfo> list = new LinkedList<JedisShardInfo>(); list.add(jedisShardInfo1); list.add(jedisShardInfo2);
ShardedJedisPool pool = new ShardedJedisPool(config, list);
// 从池中获取一个Jedis对象 ShardedJedis jedis = pool.getResource(); String keys = "name"; String value = "snowolf"; // 删数据 jedis.del(keys); // 存数据 jedis.set(keys, value); // 取数据 String v = jedis.get(keys); System.out.println(v); // 释放对象池 pool.returnResource(jedis);