目录
本关任务:了解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.1String 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监听的端口,默认为6379Jedis 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.netRedis存储的字符串为: 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();
- }
- }
