• Spring、MyBatis框架和Redis数据库介绍 第3关:Redis数据库简介


    目录

    任务描述

    相关知识

    Redis 是什么

    Redis 的优势

    Redis 的用途

    Java 中连接Redis

    Redis 字符串实例

    编程要求

    测试说明

    参考代码 


    任务描述

    本关任务:了解Java中使用Redis的基本方法。

    相关知识

    Redis 是什么

    Redis是一个完全开源免费、高性能的key-value数据库。所谓key-value数据库是一种以键值对存储数据的数据库。类比于Java中的Map,可以将整个数据库理解为一个大型的Map,每个键都会对应一个唯一的值。 Redis与其他key-value产品相比有以下三个特点:

    • Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用;
    • Redis不仅仅支持简单的key-value类型的数据,同时还提供listsetzsethash等数据结构的存储;
    • Redis支持数据的备份,即master-slave(主从)模式的数据备份。

    Redis 的优势

    • 性能极高,官方数据表示Redis能读的速度是110000次每秒,写的速度是81000次/秒 ;
    • 丰富的数据类型, Redis支持二进制案例的Strings, Lists, Hashes, Sets 及 Ordered Sets 数据类型操作;
    • 原子性,Redis的所有操作都是原子性的,意思就是要么成功执行,要么失败完全不执行。单个操作是原子性的。多个操作也支持事务,即原子性,通过MULTIEXEC指令包起来;
    • 丰富的特性,Redis还支持 publish/subscribe(发布订阅), 通知, key过期等等特性。

    Redis 的用途

    Redis的所有数据在使用时都存放在内存中,由于Redis的性能极高,且数据类型丰富等优势,Redis通常被用来缓存应用经常被访问的热点数据。当然,Redis还有其它用途,如分布式锁、计数器等等,不详细介绍。

    Java 中连接Redis

    Java中使用Redis前,我们需要确保已经安装了Redis服务及对应的Java Redis驱动,并且在你的机器上配置好了Java环境。这些环境配置在实训环境中已经为你配置好了,在此不需要关注。如果在自己电脑上使用,需要从官网下载Redis安装,并把Java Redis驱动文件Jedis.jar添加到ClassPath中。

    下面代码是完成环境配置后,在Java代码中连接Redis的示例。

    1. package step3;
    2. import redis.clients.jedis.Jedis;
    3. public class ConnRedisDemo {
    4. public static void main(String[] args) {
    5. //redis数据所在的主机,如果是redis安装在本机,则是localhost或127.0.0.1
    6. String redisHost = "192.168.1.134";
    7. int redisPort=6379;//Redis监听的端口,默认为6379
    8. //创建1个Jedis对象。这是用来操作Redis数据库
    9. Jedis jedis = new Jedis(redisHost,redisPort);
    10. System.out.println("连接成功");
    11. String resp = jedis.ping();//调用jedis的方法,查看服务是否运行
    12. System.out.println("Redis服务正在运行" + resp);//
    13. jedis.close();//关闭redis连接
    14. }
    15. }

    上面代码中,我们连接的是位于主机192.168.1.134上的Redis数据库,Redis数据库监听的端口号为6379(默认端口)。如果Redis服务正常运行,上面代码输出如下。

    1. 连接成功
    2. Redis服务正在运行PONG

    Redis 字符串实例

    Redis支持的数据类型非常丰富,下面是一个操作字符串类型key-value的示例。

    1. package step3;
    2. import redis.clients.jedis.Jedis;
    3. /**
    4. * @author zpengx@outlook.com
    5. * @description
    6. */
    7. public class RedisStrDemo {
    8. public static void main(String[] args) {
    9. String redisHost = "192.168.1.128";//Redis数据所在的主机
    10. int redisPort = 6379;//Redis监听的端口,默认为6379
    11. Jedis jedis = new Jedis(redisHost, redisPort);
    12. System.out.println("连接成功");
    13. //保存一个字符串类型的key-value对到Redis中
    14. jedis.set("educoder", "www.educoder.net");
    15. //根据key从Redis中取出数据输出
    16. String val = jedis.get("educoder");
    17. String val2 = jedis.get("educoder2");
    18. System.out.println("Redis存储的字符串为: " + val);
    19. System.out.println("Redis存储的字符串为: " + val2);
    20. jedis.close();
    21. }
    22. }

    首先我们通过指定IP和端口连接上对应的Redis数据库,然后把一个keyeducodervaluewww.educoder.net的键值对存入Redis中,然后通过key获取对应的value的值。而对于jedis.get("educoder2"),因为Redis中没有keyeducoder2的键值对,所以返回null。上面代码的输出结果如下:

    1. 连接成功
    2. Redis存储的字符串为: www.educoder.net
    3. Redis存储的字符串为: null

    编程要求

    现有键值对:key1:welcomekey2:tokey3:wwwkey4:educoderkey5:net。根据提示,在右侧编辑器 Begin-End 区间补充redisExec(Jedis jedis)方法的代码,实现如下功能:

    • 把上面这些键值对存入Redis中;
    • 根据keyRedis中取出value的值,拼成一个字符串并返回,相邻value之间有空格。

    返回的字符串为welcome to www educoder net ,测试代码会输出返回的字符串。

    测试说明

    平台会对你编写的代码进行测试: 预期输出:

    1. welcome to www educoder net

    参考代码 

    RedisDemo.java

    1. package step3;
    2. import redis.clients.jedis.Jedis;
    3. public class RedisDemo {
    4. private static String[] keys = new String[]{"key1", "key2", "key3", "key4", "key5"};
    5. private static String[] values = new String[]{"welcome", "to", "www", "educoder", "net"};
    6. //jedis对象已经连接Redis数据库,请直接使用jedis对象操作
    7. public String redisExec(Jedis jedis) {
    8. //retStr保存拼接的字符串
    9. //期望的返回结果是welcome to www educoder net
    10. StringBuilder retStr = new StringBuilder();
    11. /********** Begin *********/
    12. for (int i = 0; i < keys.length; i++) {
    13. jedis.set(keys[i],values[i]);
    14. }
    15. for (String key : keys) {
    16. retStr.append(jedis.get(key)).append(" ");
    17. }
    18. retStr.deleteCharAt(retStr.length()-1);
    19. /********** End *********/
    20. return retStr.toString();
    21. }
    22. }

  • 相关阅读:
    react状态管理工具redux的使用
    KDE(Kernel Density Estimation)(核密度估计)是什么?
    Hadoop+Zookeeper+HA错题总结(一)
    [Common c/c++] 生产者消费者模型 using mutex/cv/semaphore
    kalibr标定IMU随机变量(高斯分布)的方差
    为什么我学了几天 STM32 感觉一脸茫然?
    抽象轻松的java
    阿里云Redis性能压力测试(二十)
    关于二维数组
    Docker-04:Docker制作镜像
  • 原文地址:https://blog.csdn.net/ycq0_9/article/details/127799000