|-Jedis 普通方式html
|-JedisPool 鏈接池方式(須要引入pool相關jar)java
|-Jedis 分佈式 (須要引入pool相關jar)redis
引入jedis2.7.0和commons.pool2的相關jar包app
Jedis簡單實例分佈式
只要new一個Jedis對象,就能作redis相關操做了。ide
import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Set; import redis.clients.jedis.Jedis; public class JedisDemo { public void test(){
Jedis redis = new Jedis ("172.0.0.1",6379);//鏈接redis redis.auth("redis");//驗證密碼,若是須要驗證的話
//SET key value將字符串值value關聯到key。 redis.set("name", "wangjun1"); redis.set("id", "123456"); redis.set("address", "guangzhou"); //SETEX key seconds value將值value關聯到key,並將key的生存時間設爲seconds(以秒爲單位)。 redis.setex("foo", 5, "haha"); //MSET key value [key value ...]同時設置一個或多個key-value對。 redis.mset("haha","111","xixi","222"); //redis.flushAll();清空全部的key
System.out.println(redis.dbSize());//dbSize是多少個key的個數 //APPEND key value若是key已經存在而且是一個字符串,APPEND命令將value追加到key原來的值以後。 redis.append("foo", "00");//若是key已經存在而且是一個字符串,APPEND命令將value追加到key原來的值以後。 //GET key 返回key所關聯的字符串值 redis.get("foo"); //MGET key [key ...] 返回全部(一個或多個)給定key的值 List list = redis.mget("haha","xixi"); for(int i=0;i<list.size();i++){ System.out.println(list.get(i)); } }
public static void main(String[] args) { JedisDemo t1 = new JedisDemo(); t1.test(); }
}
JedisPoolui
Jedis 使用 commons-pool 完成池化實現。spa
一、 配置文件(properties文件):code
#最大分配的對象數 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=172.0.0.1 #Port redis.port=6379
二、在靜態代碼段中完成初始化:獲得 pool htm
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這時候須要從pool中得到
// 從池中獲取一個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);
Jedis分佈式(Sharding/shared一致性哈希)
一、保留前面的 JedisPoolConfig ,新增Redis的IP(redis1.ip,redis2.ip),完成兩個JedisShardInfo 實例 ,將其丟進List中:
List<JedisShardInfo> list = new LinkedList<JedisShardInfo>();
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.add(jedisShardInfo1); list.add(jedisShardInfo2);
二、初始化 ShardedJedisPool 代替 JedisPool:
ShardedJedisPool pool = new ShardedJedisPool(config, list);
三、改由ShardedJedis,獲取Jedis對象:
// 從池中獲取一個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);
經過以上方式,向redis進行set操做的key-value,會經過hash而均勻的分配到pool裏的redis機器中。
轉載自:http://www.tuicool.com/articles/jM7RF3Y
參考:http://www.cnblogs.com/liuling/p/2014-4-19-04.html