介绍这些Redis的命令在代码中的操作,挑选一些有代表性的命令,我相信jedis的命令和Redis客户端的命令大差不差!
命令
get/set
public static void test1(Jedis jedis) {
//先清空数据库,来避免上一组测试带来的影响
jedis.flushAll();
jedis.set("key","111");
jedis.set("key2","222");
String str1 = jedis.get("key");
System.out.println(str1);
}
同时还可以添加参数
public static void test1(Jedis jedis) {
//先清空数据库,来避免上一组测试带来的影响
jedis.flushAll();
SetParams setParams = new SetParams();
setParams.ex(10);
setParams.xx();
jedis.set("key","111",setParams);
jedis.set("key2","222");
String str1 = jedis.get("key");
System.out.println(str1);
}
exists
public static void test2(Jedis jedis) {
jedis.flushAll();
jedis.set("key","111");
jedis.set("key2","222");
System.out.println(jedis.exists("key"));
}
del
public static void test2(Jedis jedis) {
jedis.flushAll();
jedis.set("key","111");
jedis.set("key2","222");
System.out.println(jedis.exists("key"));
long str1 = jedis.del("key");
System.out.println(str1);
}
同样支持删除多个key操作
public static void test2(Jedis jedis) {
jedis.flushAll();
jedis.set("key","111");
jedis.set("key2","222");
System.out.println(jedis.exists("key"));
long str1 = jedis.del("key");
System.out.println(str1);
System.out.println(jedis.del("key", "key2"));
}
Question:C语言都支持变长参数列表了,C++肯定更支持了啊,为啥C++的redis-plus-plus没有采取变长参数列表,来实现对应的接口呢?
Answer:Java这里的变长参数列表,是要求变长参数必须是相同类型的,是带有类型检查的,printf这块虽然给出的参数类型可能不同,但是Java中也可以进行对于的类型检查(付出一些运行时开销)
C++的变长参数列表,是没有类型检查的,全凭我们自觉,C++更倾向于能在编译期检查以及自己发现问题
keys
private static void test3(Jedis jedis) {
jedis.flushAll();
jedis.set("key", "value");
jedis.set("key2", "value");
jedis.set("key3", "value");
jedis.set("key4", "value");
Set<String> set = jedis.keys("*");
//Redis中的key不能重复,而且也不在意顺序
}
Question:为啥Java中直接返回了一个集合类(对于C++中的容器),而C++要搞的那么复杂,搞个迭代器之类的?
Answer:考虑到Java和C++的语法区别,有两方面原因
- 和C兼容
- 极致的性能
当C++中使用插入迭代器来作为获取返回值的结果的时候,就留下了更多的可能性;假设,现在有多组redis服务器,redis客户端,需要获取到这N个redis服务器中所有的key,最终汇总到一起
- 按照Java的写法:分别针对N个服务器,调用N次keys,然后得到N个set,再把这些set合并到一起去
- 按照C++的写法,分别针对N个服务器,调用N次keys,但是这N次keys的结果,可以使用同一个插入迭代器,往同一个容器中插入(相比于上面的Java的实现,少了一步合并的操作)
性能是极致了,但是代码写起来就更麻烦一些(开发效率受到影响了)
expire / ttl
private static void test4(Jedis jedis) {
jedis.flushAll();
jedis.set("key", "value");
jedis.expire("key", 10);
System.out.println(jedis.ttl("key"));
}
强制休眠,来查看ttl命令的效果
private static void test4(Jedis jedis) throws InterruptedException {
jedis.flushAll();
jedis.set("key", "value");
jedis.expire("key", 10);
Thread.sleep(3000);
System.out.println(jedis.ttl("key"));
}
type
private static void test5(Jedis jedis) {
jedis.flushAll();
jedis.set("key", "value");
System.out.println(jedis.type("key"));
}
private static void test5(Jedis jedis) {
jedis.flushAll();
jedis.set("key", "value");
System.out.println(jedis.type("key"));
jedis.lpush("key1", "value", "value2", "value3");
System.out.println(jedis.type("key1"));
jedis.hset("key2", "value", "value2");
System.out.println(jedis.type("key2"));
jedis.sadd("key3", "value1", "value2", "value3");
System.out.println(jedis.type("key3"));
jedis.zadd("key4",10,"haha");
System.out.println(jedis.type("key4"));
}
这些就是比较典型的命令啦!!!