jedis 切片(叢集) 非切片(單機)執行個體,jedis叢集
package testRedis;
importjava.util.ArrayList;
importjava.util.Iterator;
importjava.util.List;
importjava.util.Set;
importredis.clients.jedis.Jedis;
importredis.clients.jedis.JedisPool;
importredis.clients.jedis.JedisPoolConfig;
importredis.clients.jedis.JedisShardInfo;
importredis.clients.jedis.ShardedJedis;
importredis.clients.jedis.ShardedJedisPool;
importredis.clients.jedis.SortingParams;
importredis.clients.util.Pool;
/**
*@author WHD
*2015-4-19
*/
public classRedisClient {
// 擷取資料庫的串連,非切片用戶端串連
privateJedis jedis;
// 非切片串連池
privateJedisPool jedisPool;
//切片用戶端
privateShardedJedis shardedJedis;
// 切片串連池
privateShardedJedisPool shardedJedisPool;
// 建構函式
publicRedisClient(){
// 初始化串連池
initialPool();
// 初始化切片串連池
initialShardedPool();
// 從切片池中擷取切片執行個體
shardedJedis=shardedJedisPool.getResource();
// 從非切片池中擷取執行個體
jedis=jedisPool.getResource();
}
// 初始化非切片池
privatevoid initialPool(){
// 池的配置
JedisPoolConfig config= new JedisPoolConfig();
// 最大串連數
config.setMaxActive(20);
// 最大空閑串連數
config.setMaxIdle(5);
//擷取串連時的最大等待毫秒數
config.setMaxWait(10001);
//在空閑時檢查有效性, 預設false
config.setTestOnBorrow(false);
jedisPool= new JedisPool(config,"127.0.0.1",6379);
}
// 初始化切片池
private void initialShardedPool(){
// 池基本配置
JedisPoolConfig config= new JedisPoolConfig();
// 最大串連個數
config.setMaxActive(20);
// 最大空閑串連數
config.setMaxIdle(2);
//擷取串連時的最大等待毫秒數
config.setMaxWait(10001);
// 在空閑時檢查有效性,預設false
config.setTestOnBorrow(false);
//slave 串連, 這裡實現了叢集的功能,配置多個redis服務實現請求的分配進行負載平衡
List<JedisShardInfo> shards= newArrayList<JedisShardInfo>();
shards.add(newJedisShardInfo("192.168.0.106",6379,"master"));
shards.add(newJedisShardInfo("192.168.0.100",6379,"master"));
// 構造池
shardedJedisPool= newShardedJedisPool(config,shards);
}
public void show (){
KeyOperate();
StringOperate();
ListOperate();
// 釋放串連
jedisPool.returnResource(jedis);
// 釋放串連
shardedJedisPool.returnResource(shardedJedis);
}
//
private void KeyOperate(){
System.out.println("清空所有資料庫"+jedis.flushDB());
// 判斷key是否存在
System.out.println("判斷key999建是否存在"+shardedJedis.exists("key999"));
System.out.println("新曾key001value001鍵值對"+shardedJedis.set("key001","value001"));
System.out.println("判斷key001是否存在"+shardedJedis.exists("key001"));
//輸出系統中所有的key
System.out.println("新增key002value002"+shardedJedis.set("key002","value002"));
System.out.println("系統中的所有鍵如下:");
Set<String> keys=jedis.keys("*");
Iterator<String> it= keys.iterator();
while(it.hasNext()){
String key= it.next();
System.out.println(key);
}
// 刪除某個key 如果不從在則忽略
System.out.println("系統中刪除key002"+jedis.del("key002"));
System.out.println("判斷是否存在"+jedis.exists("key002"));
// 設定key 001 的到期時間
System.out.println("設定key001的到期時間為五秒"+jedis.expire("key001",5));
try{
Thread.sleep(2000);
}catch(Exception e){
e.printStackTrace();
}
// 查看某個key的剩餘時間 單位秒 不存在或永久 返回-1
System.out.println("查看key001的剩餘時間"+jedis.ttl("key001"));
//移除某個key的剩餘時間
System.out.println("刪除key001的剩餘時間"+jedis.persist("key001"));
//移除後在看時間
System.out.println("剩餘時間"+jedis.ttl("key001"));
// 查看key 所儲存的值的類型
System.out.println("查看key所儲存的值的類型"+jedis.type("key001"));
}
/**
* String 類型
*/
private void StringOperate(){
System.out.println("+=+++++++String+++++++===");
//清空資料
System.out.println("清空資料庫中的資料"+jedis.flushDB());
System.out.println("========曾==========");
jedis.set("key001","value001");
jedis.set("key002","value002");
jedis.set("key003","value003");
System.out.println("以新增3個鍵值對 如下:");
System.out.println(jedis.get("key001"));
System.out.println(jedis.get("key002"));
System.out.println(jedis.get("key003"));
System.out.println("=======刪除======");
System.out.println("刪除key003鍵值對"+jedis.del("key003"));
System.out.println("擷取key003建對應的值"+jedis.get("key003"));
System.out.println("======改=====");
// 直接覆蓋原來的值
System.out.println("直接覆蓋原來的值"+jedis.set("key001","value001-update"));
System.out.println("擷取key001 對應的新值 "+jedis.get("key001"));
// 如果有的話 則不修改如果沒有的話則要修改
System.out.println("沒有添加,有則無效"+jedis.setnx("key001","value001 a new "));
//擷取這個值看看那
System.out.println("修改了之後應該是value001 a new 擷取這個值"+jedis.get("key001"));
// 直接覆蓋原來的資料
System.out.println("在ke0y002原值後面追加"+jedis.append("key002","appendString"));
System.out.println("擷取key002的新值"+jedis.get("key002"));
System.out.println("======曾,刪查多個=======");
/**
* mset mget 同時新增 修改 查詢多個鍵值對
*/
// 一次性新增多個值
System.out.println(jedis.mset("key201","value201","key202","value202","key203","value203","key204","value204"));
//一次獲得多個建的值
System.out.println(jedis.mget("key201","key202","key203","key204"));
// 一次性刪除多個值
System.out.println("一次性刪除多個值"+jedis.del(newString[]{"key201","key202","key203","key204"}));
// jedis 中有的方法在 shardedJedis 中也可以直接使用,下面測試一些前面沒有使用過的方法
System.out.println("=========STRING2====");
System.out.println("清空所有資料庫"+jedis.flushDB());
System.out.println("原先 key301不存在的時候 新增301"+shardedJedis.setnx("key301","value301"));
System.out.println("原先key302 不存在的時候新增 302"+shardedJedis.setnx("key302","value302"));
System.out.println("原先key302存在時試著新增 302"+shardedJedis.setnx("key302","value302"));
// 擷取key3... 的值
System.out.println("擷取key301的值"+shardedJedis.get("key301"));
System.out.println("擷取key302的值"+shardedJedis.get("key302"));
// 超期 有效鍵值對被刪除
System.out.println("=======");
System.out.println("key303的有效時間為2"+shardedJedis.setex("key303", 2,"key303-2second"));
System.out.println("擷取key303 的值"+shardedJedis.get("key303"));
try{
Thread.sleep(3000);
}catch(Exception e){
}
System.out.println("到期後的key303的值"+shardedJedis.get("key303"));
//擷取原值,更新為新值一步完成
System.out.println("key302 的原值"+shardedJedis.getSet("key302","value302-aftergetset"));
System.out.println("key302 的新值"+shardedJedis.get("key302"));
// 擷取某個key 的子串
System.out.println("擷取key302對應值中的子串"+shardedJedis.getrange("key302", 2, 4));
}
/**
* list 類型
*/
private void ListOperate(){
System.out.println("=======list======11");
// 清空資料
System.out.println("清空資料庫中的所有資料"+jedis.flushDB());
// 添加資料
System.out.println("====增====");
shardedJedis.lpush("stringlists","vectory");
shardedJedis.lpush("stringlists","arraulist");
shardedJedis.lpush("stringlists","vectory");
shardedJedis.lpush("stringlists","vectory");
shardedJedis.lpush("stringlists","linkedlist");
shardedJedis.lpush("stringlists","maplist");
shardedJedis.lpush("stringlists","hashlist");
shardedJedis.lpush("numberlist","1");
shardedJedis.lpush("numberlist","2");
shardedJedis.lpush("numberlist","3");
shardedJedis.lpush("numberlist","4");
shardedJedis.lpush("numberlist","5");
shardedJedis.lpush("numberlist","6");
//擷取stringlist 的所有資料
System.out.println("所有資料stringlists"+shardedJedis.lrange("stringlists",0, -1));
List<String>stringlist=shardedJedis.lrange("stringlists", 0, -1);
System.out.println("stringlist 的長度"+stringlist.size());
// 擷取 numberlist 的所有資料
System.out.println("擷取numberlist的所有資料"+shardedJedis.lrange("numberlist", 0,-1));
List<String> numberlist=shardedJedis.lrange("numberlist", 0, -1);
System.out.println("numberlist 的長度"+numberlist.size());
// 元素的刪除
System.out.println("元素的刪除");
// 刪除列表指定的值,第二個參數為刪除個數(如果有重複)後添加的先刪除,類似棧
System.out.println("刪除指定的元素"+shardedJedis.lrem("stringlists", 2,"vectory"));
System.out.println("刪除指定的元素在擷取所有元素"+shardedJedis.lrange("stringlists",0,-1));
// 刪除制定區間以外的資料
System.out.println("刪除指定區間以外的資料"+shardedJedis.ltrim("stringlists", 0, 3));
//擷取刪除指定元素外的的資料
System.out.println("刪除指定區間的資料"+shardedJedis.lrange("stringlists", 0,-1));
//列表元素出棧
System.out.println("列表元素出棧"+shardedJedis.lpop("stringlists"));
// 出棧後資料的擷取
System.out.println("出棧後擷取所有元素"+shardedJedis.lrange("stringlists", 0,-1));
// 修改列表中制定下標的值:
System.out.println("修改列表中指定下標的值"+shardedJedis.lset("stringlists", 0,"hello world"));
// 擷取修改制定下標的值
System.out.println("修改後的值"+shardedJedis.lrange("stringlists", 0,-1));
// 查詢 某個key的 數組的長度
System.out.println("擷取長度shardedJedis的"+shardedJedis.llen("stringlists"));
//查詢 某個key的 數組的長度
System.out.println("擷取長度numberlist的"+shardedJedis.llen("numberlist"));
// 排序 list中存字串時必須指定參數為alpha,如果不使用sortingparams,而是直接使用sort("list")
SortingParams sortingParameters= newSortingParams();
sortingParameters.alpha();
sortingParameters.limit(0,3);
// 排序後的結果
System.out.println("返回排序後的結果stringlists"+shardedJedis.sort("stringlists",sortingParameters));
System.out.println("返回排序後的結果 numberlist"+shardedJedis.sort("numberlist"));
// 擷取子串 -1 代表倒數第一個 -2 代表倒數第二個
System.out.println("子串第二個開始到結束"+shardedJedis.lrange("stringlists", 1,-1));
// 擷取 第二個到倒數第二個
System.out.println("擷取子串"+shardedJedis.lrange("stringlists", 1, -2));
//擷取制定下標的資料
System.out.println("擷取stringlist 的指定的下標的值"+shardedJedis.lindex("stringlists",2));
}
}