目录
本关任务:了解Java
中使用Redis
的基本方法。
Redis
是一个完全开源免费、高性能的key-value
数据库。所谓key-value
数据库是一种以键值对存储数据的数据库。类比于Java
中的Map
,可以将整个数据库理解为一个大型的Map
,每个键都会对应一个唯一的值。 Redis
与其他key-value
产品相比有以下三个特点:
Redis
支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用;Redis
不仅仅支持简单的key-value
类型的数据,同时还提供list
,set
,zset
,hash
等数据结构的存储;Redis
支持数据的备份,即master-slave
(主从)模式的数据备份。Redis
能读的速度是110000
次每秒,写的速度是81000
次/秒 ;Redis
支持二进制案例的Strings
, Lists
, Hashes
, Sets
及 Ordered Sets
数据类型操作;Redis
的所有操作都是原子性的,意思就是要么成功执行,要么失败完全不执行。单个操作是原子性的。多个操作也支持事务,即原子性,通过MULTI
和EXEC
指令包起来;Redis
还支持 publish/subscribe
(发布订阅), 通知, key
过期等等特性。Redis
的所有数据在使用时都存放在内存中,由于Redis
的性能极高,且数据类型丰富等优势,Redis
通常被用来缓存应用经常被访问的热点数据。当然,Redis
还有其它用途,如分布式锁、计数器等等,不详细介绍。
在Java
中使用Redis
前,我们需要确保已经安装了Redis
服务及对应的Java Redis
驱动,并且在你的机器上配置好了Java
环境。这些环境配置在实训环境中已经为你配置好了,在此不需要关注。如果在自己电脑上使用,需要从官网下载Redis
安装,并把Java Redis
驱动文件Jedis.jar
添加到ClassPath
中。
下面代码是完成环境配置后,在Java
代码中连接Redis
的示例。
package step3;
import redis.clients.jedis.Jedis;
public class ConnRedisDemo {
public static void main(String[] args) {
//redis数据所在的主机,如果是redis安装在本机,则是localhost或127.0.0.1
String redisHost = "192.168.1.134";
int redisPort=6379;//Redis监听的端口,默认为6379
//创建1个Jedis对象。这是用来操作Redis数据库
Jedis jedis = new Jedis(redisHost,redisPort);
System.out.println("连接成功");
String resp = jedis.ping();//调用jedis的方法,查看服务是否运行
System.out.println("Redis服务正在运行" + resp);//
jedis.close();//关闭redis连接
}
}
上面代码中,我们连接的是位于主机192.168.1.134
上的Redis
数据库,Redis
数据库监听的端口号为6379
(默认端口)。如果Redis
服务正常运行,上面代码输出如下。
连接成功
Redis服务正在运行PONG
Redis
支持的数据类型非常丰富,下面是一个操作字符串类型key-value
的示例。
package step3;
import redis.clients.jedis.Jedis;
/**
* @author zpengx@outlook.com
* @description
*/
public class RedisStrDemo {
public static void main(String[] args) {
String redisHost = "192.168.1.128";//Redis数据所在的主机
int redisPort = 6379;//Redis监听的端口,默认为6379
Jedis jedis = new Jedis(redisHost, redisPort);
System.out.println("连接成功");
//保存一个字符串类型的key-value对到Redis中
jedis.set("educoder", "www.educoder.net");
//根据key从Redis中取出数据输出
String val = jedis.get("educoder");
String val2 = jedis.get("educoder2");
System.out.println("Redis存储的字符串为: " + val);
System.out.println("Redis存储的字符串为: " + val2);
jedis.close();
}
}
首先我们通过指定IP
和端口连接上对应的Redis
数据库,然后把一个key
为educoder
,value
为www.educoder.net
的键值对存入Redis
中,然后通过key
获取对应的value
的值。而对于jedis.get("educoder2")
,因为Redis
中没有key
为educoder2
的键值对,所以返回null
。上面代码的输出结果如下:
连接成功
Redis存储的字符串为: www.educoder.net
Redis存储的字符串为: null
现有键值对:key1
:welcome
,key2
:to
,key3
:www
,key4
:educoder
,key5
:net
。根据提示,在右侧编辑器 Begin-End 区间补充redisExec(Jedis jedis)
方法的代码,实现如下功能:
Redis
中;key
从Redis
中取出value
的值,拼成一个字符串并返回,相邻value
之间有空格。返回的字符串为welcome to www educoder net
,测试代码会输出返回的字符串。
平台会对你编写的代码进行测试: 预期输出:
welcome to www educoder net
RedisDemo.java
- package step3;
-
- import redis.clients.jedis.Jedis;
-
- public class RedisDemo {
- private static String[] keys = new String[]{"key1", "key2", "key3", "key4", "key5"};
- private static String[] values = new String[]{"welcome", "to", "www", "educoder", "net"};
- //jedis对象已经连接Redis数据库,请直接使用jedis对象操作
- public String redisExec(Jedis jedis) {
- //retStr保存拼接的字符串
- //期望的返回结果是welcome to www educoder net
- StringBuilder retStr = new StringBuilder();
- /********** Begin *********/
- for (int i = 0; i < keys.length; i++) {
- jedis.set(keys[i],values[i]);
- }
- for (String key : keys) {
- retStr.append(jedis.get(key)).append(" ");
- }
- retStr.deleteCharAt(retStr.length()-1);
- /********** End *********/
- return retStr.toString();
- }
- }