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 shards= newArrayList(); 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 keys=jedis.keys("*"); Iterator 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)); Liststringlist=shardedJedis.lrange("stringlists", 0, -1); System.out.println("stringlist 的長度"+stringlist.size()); // 獲取 numberlist 的所有數據 System.out.println("獲取numberlist的所有數據"+shardedJedis.lrange("numberlist", 0,-1)); List 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)); } }