上一篇介绍了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吧~