Redis入門之redis 串連以及 對字元的操作
來源:互聯網
上載者:User
[java] view plain copy package redis.clients.jedis.tests; import java.text.ParseException; import java.util.Iterator; import java.util.List; import java.util.Set; import org.junit.AfterClass; import org.junit.BeforeClass; import org.junit.Test; import redis.clients.jedis.HostAndPort; import redis.clients.jedis.Jedis; import redis.clients.jedis.Protocol; import redis.clients.jedis.ScanParams; import redis.clients.jedis.ScanResult; import redis.clients.jedis.params.set.SetParams; public class JedisAllMethodTest { static Jedis jedis = null; static HostAndPort hnp = new HostAndPort("10.0.50.11", Protocol.DEFAULT_PORT); /** * 初始化串連 * @author jackson * @date 2015-12-16 上午8:54:01 * @throws Exception * @return void */ @BeforeClass // junit 提供的@BeforeClass標籤, beforeClass 標籤只執行一次 public static void setUp() throws Exception { //串連jedis 的第一種方式 jedis = new Jedis(hnp.getHost(), hnp.getPort(), 500); jedis.connect(); jedis.auth("foobared");// redis auth 命令 驗證 redis 密碼,需要在redis.conf設定檔中,開啟 requirepass foobared 參數, jedis.configSet("timeout", "300");// redis config 命令 jedis.flushAll();// redis flushall 命令 清空所有key 及清空所有資料 //串連jedis的第二種方式 /* 使用 uri 串連資料庫 jedis = new Jedis(new URI("redis://:foobared@10.0.50.11:6379/4"), 15000,15000);// 4 表示串連的是 第5個資料庫 url,逾時時間,輸入資料流逾時時間 jedis.connect(); jedis.flushAll();// redis flushall 命令 清空所有key 及清空所有資料 */ // 串連jedis的第三種方式 /*使用 jedisShardInfo 串連redis JedisShardInfo jedisShardInfo = new JedisShardInfo("redis://:foobared@10.0.50.11:6379/1");// /1 表示串連的是 第二個資料庫 ;foobared 資料庫的密碼 jedisShardInfo.setConnectionTimeout(150000); jedisShardInfo.setSoTimeout(150000); jedis = new Jedis(jedisShardInfo); jedis.connect(); jedis.flushAll();// redis flushall 命令 清空所有key 及清空所有資料 */ } /** * 關閉串連 * @author jackson * @date 2015-12-16 上午8:54:34 * @return void */ @AfterClass public static void tearDown() { // 當標籤為 AfterClass BeforeClass 時方法 必須為static 為 before after 時不需要 jedis.disconnect();// 最終調用的是 Connection 中的 disconnect 作用是關閉流,關閉socket } /** * redis 中 對 字串 和key的操作的示範 * @author jackson * @date 2015-12-17 下午1:15:10 * @throws InterruptedException * @throws ParseException * @return void */ /** * @author jackson * @date 2015-12-17 下午1:48:00 * @throws InterruptedException * @throws ParseException * @return void */ @Test public void jedisStringKeyTest() throws InterruptedException, ParseException{ System.out.println("===測試jedis BEGIN==="); // sotimeOut設定socket調用InputStream讀資料的逾時時間 jedis.set("test", "test"); System.out.println(jedis.get("test")); jedis.append("test", "test2");// 最終是將 字串轉換為位元組數組通過流的形式寫入 System.out.println(jedis.get("test")); /* * NX|XX, NX --有此參數時只能 set 不存在的key,如果給已經存在的key set 值則不生效, XX -- 此參數只能設定已經存在的key 的值,不存在的不生效 * EX|PX, key 的存在時間: EX = seconds; PX = milliseconds * */ // 驗證 NX XX String status = jedis.set("test", "test234",SetParams.setParams().nx());// status 為null 則說明操作失敗 System.out.println("測試SetParams.setParams().nx()給已經存在的key set值 操作狀態:"+status + "操作值"+jedis.get("test")); // 輸出值testtest2 status = jedis.set("test1", "test2222",SetParams.setParams().nx());//status 為ok System.out.println("測試SetParams.setParams().nx()給不存在的key set值 操作狀態 操作狀態:"+status + "操作值"+jedis.get("test1"));// 輸出值為test2222 status = jedis.set("test1", "test342222",SetParams.setParams().xx());// status 為ok System.out.println(" 測試SetParams.setParams().xx()給已經存在的key set值 操作狀態 操作狀態:"+status + "操作值"+jedis.get("test1"));// 輸出值為 test342222 status = jedis.set("test21", "test34212222",SetParams.setParams().xx());// status 為null System.out.println("測試SetParams.setParams().xx()給不存在的key set值 操作狀態 操作狀態 操作狀態:"+status + "操作值"+jedis.get("test21"));// 輸出值為null // 驗證 EX|PX status = jedis.set("testEX", "testEX",SetParams.setParams().ex(1)); System.out.println("測試 ex 操作狀態:"+status+"操作值:"+jedis.get("testEX"));// 輸出 testEX Thread.sleep(1002); System.out.println("測試ex 1 秒後自動銷毀,輸出null 操作狀態:"+status+"操作值:"+jedis.get("testEX"));// 1 秒後自動銷毀,輸出null status = jedis.set("testPX", "testEX",SetParams.setParams().px(100)); System.out.println("測試 px 操作狀態:"+status+"操作值:"+jedis.get("testPX"));// 輸出 testEX Thread.sleep(101); System.out.println("測試px 1 秒後自動銷毀 操作狀態:"+status+"操作值:"+jedis.get("testPX"));// 1 秒後自動銷毀,輸出null // Note: 因為SET 命令可以通過參數來實現和SETNX 、SETEX 和PSETEX 三個命令的效果,所以將來的Redis 版本可能會廢棄並最終移除SETNX 、SETEX 和PSETEX 這三個命令 //setNx 將key 的值設為value ,若且唯若key 不存在。若給定的key 已經存在,則SETNX 不做任何動作。 SETNX 是『SET if Not eXists』(如果不存在,則SET) 的簡寫 // 類似於 set(key,value,nx) // 當key 不存在時 long n = jedis.setnx("key6", "value6"); System.out.println(n!=0?"set 成功"+jedis.get("key6"):"set 失敗"); // set 成功返回 1 set失敗返回 0 // 當key 存在時 n = jedis.setnx("key6", "value6"); System.out.println(n!=0?"set 成功"+jedis.get("key6")+n:"set 失敗"+jedis.get("key6")+n); // setex 類似於 執行 set(key,value) 在執行 EXPIRE 類似於 set(key,value,ex) 設定存留時間是 秒級的 status = jedis.setex("key7", 1, "value7"); System.out.println(status+jedis.get("key7")); Thread.sleep(1000); System.out.println(jedis.get("key7")); jedis.psetex("key20", 10, "value20");// 設定毫秒級的存留時間,類似於 set(key,value,px) // exists 檢查給定key(多個 key值) 是否存在。 傳回值: 若 所有key都不存在,返回0 ,若存在 則返回 存在key的數量 System.out.println("===測試 exists 命令: ===="); n = jedis.exists("test1 test test2".split(" ")); // int count = "test1 test test2".split(" ").length - (int) n; System.out.println( n != 0 ? "key 存在 個數為:"+n+" 不存在個數為:"+count:"key 不存在"+n); // exist 檢查 單個 key 值是否存在 傳回值: 如果key 值存在 返回 true ,如果不存在 在返回false boolean exists = jedis.exists("test");// 返回true System.out.println(exists); // del 刪除給定的一個或多個key 。不存在的key 會被忽略 傳回值: 返回刪除key 的數量, System.out.println("===測試 del 命令:=== "); n = jedis.del("test1 test test2".split(" ")); System.out.println("刪除key 的數量為"+n); System.out.println(jedis.get("test")+jedis.get("test1"));// 返回null 說明已經刪除了 jedis.set("testDel", "testDel"); n = jedis.del("testDel"); System.out.println("刪除key 的數量為"+n); // type 命令 System.out.println("===測試 type 命令:=== "); String type = jedis.type("test"); // test 不存在 返回none System.out.println("儲存類型為:"+type); jedis.set("testType", "testType"); type = jedis.type("testType"); // test 返回String System.out.println("儲存類型為:"+type); jedis.flushAll(); // mset 命令 批量 插入 插入所有的值,如果key值已經存在,則進行覆蓋 插入成功 返回ok 總是插入成功