上一篇介紹了jedis的高級特性,這一片咱們就介紹一下基本的功能,好像有點本末倒置是吧,不過沒關系,我就是這么的任性!本文只是一些基本的API的羅列,一是對jedis功能的記錄,每次需要市翻一下,另外也算是翻譯,給那些懶得看英文注釋的朋友一點幫助。老樣子,上maven
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.9.0</version>
</dependency>
一. 基礎功能
@Test
public void testBase() throws InterruptedException {
//set值
jedis.set("1_set1", "1");
jedis.set("1_set2", "2");
//get 值
assert "1".equals(jedis.get("1_set1"));
//當key的個數為1時 exists的返回值是boolean
assert jedis.exists("1_set1");
//當keys的個數大于1,那么返回值的結果為包含key的個數
assert 2 == jedis.exists("1_set1", "1_set2", "none");
//刪除key,返回值為刪除的個數,如果key不存在,什么也不操作
assert 1 == jedis.del("1_set1");
/**
* 表明這個key對應的類型。"none","string","list","set",none的話是沒有這個key的返回值
*/
assert "string".equals(jedis.type("1_set2"));
/**
* 給key重新命名,如果oldKey與newKey名稱一樣,報錯!如果新的key已經存在,那么覆蓋
*/
assert "OK".equals(jedis.rename("1_set2", "1_set3"));
/**
* 設置這個key的存在時間為1s,1秒過后,key被刪除
*/
jedis.expire("1_set3", 1);
Thread.sleep(2000);
/**
* 過了超時的時間,key被清除,所以key不存在了
*/
assert null == jedis.get("1_set3");
/**
* set 與 expire 命令的結合版
*/
jedis.setex("ttl", 5, "ddd");
/**
* 一個會過期的key距離被刪除還有多少時間,單位是秒
* 返回值為-1標識這個key沒有失效時間,-2標識沒有這個key
*/
assert jedis.ttl("ttl") <= 5;
/**
* 返回原來的值,設置舊值,原子操作
*/
assert "ddd".equals(jedis.getSet("ttl", "aaa"));
jedis.set("sub", "asdfghjkl");
/**
* 截取某個key的value,左右兩邊都是閉合的,負數的話是從最后開始,
* -1為倒數第一個字符,-2為倒數第二個字符,以此類推
*/
assert "asd".equals(jedis.substr("sub", 0, 2));
assert "asdfghjk".equals(jedis.substr("sub", 0, -2));
/**
* 批量set值 以key,value,key,value的格式,如果key存在value覆蓋,key不存在,value添加
*/
jedis.mset("a", "1", "b", "2", "c", "3");
List<String> mget = jedis.mget("a", "b", "c");
assert Arrays.asList("1", "2", "3").equals(mget);
/**
* append 添加,是set的一種特殊情況,如果key值不存在,
* 同set,直接設置值,如果key存在,那么value為原來的vlaue+append方法中的value
*/
jedis.append("a", "444");
assert "1444".equals(jedis.get("a"));
}
二. hash
/**
* h開頭 代表 hash 表
* key:對應的是hash表的名稱
* field : 對應的key
* value:對應的是value
* <p>
* <p>
* <p>
* m 批量 mass
*/
@Test
public void testHash() {
/**
* 往hash表里set值
*/
jedis.hset("hset", "name", "tt");
/**
* 從hash表中取值
*/
assert "tt".equals(jedis.hget("hset", "name"));
/**
* 如果hset中name已經存在,那么不進行任何操作,返回0,表示field已經存在
* 如果不存在,操作同hset一致,返回1
*
*
* 該實例中已經存在所以不賦值
*/
jedis.hsetnx("hset", "name", "dd");
assert "tt".equals(jedis.hget("hset", "name"));
Map<String, String> map = new HashMap<>();
map.put("age", "23");
map.put("address", "山東");
/**
* 批量set hash表中的值 ,如果field存在,那么替換老值
*/
jedis.hmset("hset", map);
/**
* 批量get,如果field不存在返回null,不會報錯
*/
List<String> hmget = jedis.hmget("hset", "age", "name", "address", "44");
assert Arrays.asList("23", "tt", "山東", null).equals(hmget);
/**
* 判斷存在
*/
assert jedis.hexists("hset", "name");
/**
* 刪除成功返回1,0 標識沒有進行任何操作
*/
assert 1 == jedis.hdel("hset", "age");
/**
* hash 表中有多少個元素
*/
assert 2 == jedis.hlen("hset"); //name,address
/**
* "hset"這個hash表中有多個值
*/
List<String> hsetValues = jedis.hvals("hset");
assert Arrays.asList("tt", "山東").equals(hsetValues);
/**
* "hset"這個hash表中有多少個key
*/
Set<String> hsetKeys = jedis.hkeys("hset");
for(String key:hsetKeys){
System.out.print(key+" ");
}
/**
* 獲取hash表中的所有的內容
*/
Map<String, String> hsetAll = jedis.hgetAll("hset");
for (Map.Entry<String, String> entry : hsetAll.entrySet()) {
System.out.println("field="+entry.getKey()+",value="+entry.getValue());
}
}
三. list
@Test
public void testList() {
jedis.del("l");
/**
* 從列表右邊添加元素
*/
jedis.rpush("l", "123", "456", "789");
/**
* 從列表左邊添加元素 ,注意元素順序 888,999,666
*/
jedis.lpush("l", "666", "999", "888");
/**
* list 中的長度
*/
Long length = jedis.llen("l");
assert 6 == length;
/**
* key的類型為list
*/
assert "list".equals(jedis.type("l"));
/**
* 輸出制定范圍的數據
*/
List<String> range = jedis.lrange("l", 0, length);
for (String sr : range) {
System.out.print(sr + " ");
}
System.out.println();
//裁剪函數,同lrange的區別在于ltrim改變了原來的內容 ,左右閉合
jedis.ltrim("l", 0, 3);
length = jedis.llen("l");
range = jedis.lrange("l", 0, length);
for (String sr : range) {
System.out.print(sr + " ");
}
System.out.println();
/**
* 輸出制定索引位置的數據
*/
assert "888".equals(jedis.lindex("l", 0));
/**
* 把list中的頭的數據彈出來 ,并且刪除
*/
String lpopValue = jedis.lpop("l");
assert "888".equals(lpopValue);
/**
* 把list中的尾的數據彈出來,并且刪除
*/
String rpopValue = jedis.rpop("l");
assert "123".equals(rpopValue);
/**
* 1. 返回值標識刪除的個數 ,如果不存在要刪除的元素,返回0
* 2. count 字段比較有意思,他的絕對值表示刪除的個數。0 表示全刪 ,正數表示從左往右,負數表示從右往左
*/
assert 1==jedis.lrem("l", 1, "666");
}
四. set
/**
* set中的值不允許重復
*/
@Test
public void testSet() {
/**
* 添加元素
*/
jedis.sadd("set", "123", "456", "789", "490", "777");
/**
* 重復插入
*/
jedis.sadd("set", "123", "456", "789", "490", "777");
/**
* 獲取指定key的元素的數量
*/
Set<String> set = jedis.smembers("set");
for (String str : set) {
System.out.print(str + " ");
}
/**
* 刪除元素
*/
jedis.srem("set", "456", "789");
/**
* 判斷set中元素的個數
*/
assert 3 == jedis.scard("set");
jedis.sadd("set1", "123", "456", "789");
jedis.sadd("set2", "123", "456", "777");
/**
* 取兩個set的交集,sinterstore將交集放到一個新的set中
*/
Set<String> sinter = jedis.sinter("set1", "set2");
for (String s : sinter) {
System.out.println(s);
}
/**
* 兩個set的并集,sunionstore將并集放到一個新的set中
*/
Set<String> sunion = jedis.sunion("set1", "set2");
for (String s : sunion) {
System.out.println(s);
}
/**
* 差集,以第一個集合作為基準
*/
jedis.sadd("deff1", "1", "2", "3", "4");
jedis.sadd("deff2", "1");
jedis.sadd("deff3", "3", "4");
Set<String> sdiff = jedis.sdiff("deff1", "deff2", "deff3");
for (String s : sdiff) {
System.out.println(s);
}
}
另外還有一個SortedSet的一個結構,是在set的基礎上增加了一個score的一個維度,與set不近相同。大家enjoy吧~