jedis 切片(叢集) 非切片(單機)執行個體,jedis叢集

來源:互聯網
上載者:User

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

 }

}

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.