1. Jedis应用与基本连接
jedis 是 redis推荐的java客户端。通过Jedis可以很方便地使用java代码的方式,从而对redis进行操作。jedis使用起来比较简单,它的操作方法与redis命令相类似。jedis在github上的下载地址为https://github.com/xetorthio/jedis 。如需要maven管理,可以添加如下依赖:
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.6.0</version>
</dependency>
使用jedis进行连接:
public void connectionTest() {
jedis = new Jedis("127.0.0.1", 6379); // ip+port
jedis.auth("helloworld"); //password
}
- 关系型数据库和nosql数据库
关系型数据库是基于关系表的数据库,最终会将数据持久化到磁盘上,而nosql数据库是基于特殊的结构,并将数据存储到内存的数据库。从性能上而言,nosql数据库要优于关系型数据库,从安全性上而言关系型数据库要优于nosql数据库,所以在实际开发中一个项目中nosql和关系型数据库会一起使用,达到性能和安全性的双保证。
redis就是典型的非关系型,可基于内存亦可持久化的日志型,Key-Value数据库。为什么会出现NoSql数据库?主要是对数据库高并发读写的需求,每秒钟上万次的读写请求,硬盘IO无法承受。在部分场合(发红包 获取用户的点击信息 实时热力图)可以对关系数据库起到很好的补充作用。
2. Jedis基本接口
- jedis对key的操作
public void keyTest() throws UnsupportedEncodingException {
// 清空数据
System.out.println(jedis.flushDB());
System.out.println(jedis.echo("hello"));
// 判断key否存在
System.out.println(jedis.exists("foo"));
jedis.set("key", "values");
System.out.println(jedis.exists("key"));
// 如果数据库没有任何key,返回nil,否则返回数据库中一个随机的key。
String randomKey = jedis.randomKey();
System.out.println("randomKey: " + randomKey);
// 设置60秒后该key过期
jedis.expire("key", 60);
// key有效毫秒数
System.out.println(jedis.pttl("key"));
// 移除key的过期时间
jedis.persist("key");
// 获取key的类型, "string", "list", "set". "none" none表示key不存在System.out.println("type: " + jedis.type("key"));
// 导出key的值byte[]
bytes = jedis.dump("key");System.out.println(new String(bytes));
// 将key重命名
jedis.renamenx("key", "keytest");
System.out.println("key是否存在: " + jedis.exists("key"));
// 删除key
jedis.del("key");
System.out.println(jedis.exists("key"));
}
- Jedis对字符串(String)的相关操作
public void stringTest() {
jedis.set("hello", "hello");
System.out.println(jedis.get("hello"));
// 使用append 向字符串后面添加
jedis.append("hello", " world");
System.out.println(jedis.get("hello"));
// set覆盖字符串
jedis.set("hello", "123");
System.out.println(jedis.get("hello"));
// 设置过期时间
jedis.setex("hello2", 2, "world2");
System.out.println(jedis.get("hello2"));
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
}
System.out.println(jedis.get("hello2"));
// 一次添加多个key-value对
jedis.mset("a", "1", "b", "2");
// 获取a和b的value
List<String> valus = jedis.mget("a", "b");
System.out.println(valus);
// 批量删除
jedis.del("a", "b");
System.out.println(jedis.exists("a"));
System.out.println(jedis.exists("b"));
}
- Jedis对链表(Lists)的操作
public void listTest() {
// 队列添加元素
jedis.rpush(key, "aaaa");
jedis.rpush(key, "bbbb");
jedis.rpush(key, "cccc");
// 队列长度
System.out.println("lenth: " + jedis.llen(key));
// 打印队列,从索引0开始,到倒数第1个(全部元素)
System.out.println("all elements: " + jedis.lrange(key, 0, -1));
// 索引为1的元素,当index超出范围时会返回一个error
System.out.println("index of 1: " + jedis.lindex(key, 1));
// 从队列的右边入队一个元素
jedis.rpush(key, "-2", "-1");// 先-2,后-1入队列
System.out.println("all elements: " + jedis.lrange(key, 0, -1));
// 从队列的左边入队一个或多个元素
jedis.lpush(key, "second element", "first element");// 先second
// 从队列的右边出队一个元素
System.out.println(jedis.rpop(key));
// 从队列的左边出队一个元素
System.out.println(jedis.lpop(key));
System.out.println("all elements: " + jedis.lrange(key, 0, -1));
// count > 0: 从头往尾移除值为 value 的元素,count为移除的个数。
// count < 0: 从尾往头移除值为 value 的元素,count为移除的个数。
// count = 0: 移除所有值为 value 的元素。
jedis.lrem(key, 1, "cccc");
System.out.println("all elements: " + jedis.lrange(key, 0, -1));
// 删除区间以外的元素
System.out.println(jedis.ltrim(key, 0, 2));
System.out.println("all elements: " + jedis.lrange(key, 0, -1));
}