[redis] redis 存取鍵值對常用的三種使用方式 - Jedis、JedisPool、Jedis分布式


 

|-Jedis 普通方式

|-JedisPool 連接池方式(需要引入pool相關jar)

|-Jedis 分布式 (需要引入pool相關jar)

 

引入jedis2.7.0和commons.pool2的相關jar包

 

Jedis簡單實例

只要new一個Jedis對象,就能做redis相關操作了。

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();   }
}

 

JedisPool

Jedis 使用 commons-pool 完成池化實現。

1、 配置文件(properties文件):

#最大分配的對象數
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

2、在靜態代碼段中完成初始化:得到 pool 

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")));
}

3、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一致性哈希)

1、保留前面的 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);

 

2、初始化 ShardedJedisPool 代替 JedisPool:

ShardedJedisPool pool = new ShardedJedisPool(config, list);

 

3、改由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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM