写点什么

不会用 SpringBoot 连接 Redis,那就赶紧看这篇

  • 2022 年 2 月 10 日
  • 本文字数:2316 字

    阅读完需:约 8 分钟

摘要:如何通过 springboot 来集成操作 Redis。


本文分享自华为云社区《SpringBoot连接Redis操作教程》,作者: 灰小猿。


今天来和大家分享一个如何通过 springboot 来集成操作 Redis。

一、SpringBoot 连接 Redis


springboot 连接 Redis 时需要在 pom 文件中导入所需的 jar 包依赖,依赖如下:


<!-- 加入jedis依赖 -->        <dependency>            <groupId>redis.clients</groupId>            <artifactId>jedis</artifactId>            <version>2.9.0</version>        </dependency>
复制代码

(1)使用 Jedis 类直接连接 Redis 服务器


在 springboot 环境下连接 redis 的方法有很多,首先最简单的就是直接通过 jedis 类来连接,jedis 类就相当于是 redis 的客户端表示。


连接方法如下:


/** * redis连接测试01 */@Testpublic void redisTest01() {    //连接本地的 Redis 服务    Jedis jedis = new Jedis("localhost");    // 如果 Redis 服务设置了密码,需要用下面这行代码输入密码    // jedis.auth("123456");     System.out.println("连接成功");    //查看服务是否运行    System.out.println("服务正在运行: "+jedis.ping());}
复制代码


运行后结果:



通过这种方式进行连接时,springboot 会自动的去本地寻找 redis 服务器进行连接,如果没有找到那么就会报错


如果你去阅读 jedis 的底层源码,你会发现 Jedis 类有多种构造方法,常用的几个是


使用默认地址和端口


//不传值,那么使用默认的127.0.0.1地址,6379端口就访问public Jedis()
复制代码


使用指定地址和默认端口


//只传入目的地址,那么使用指定的地址和默认的端口号去访问public Jedis(String host)
复制代码


使用指定地址和端口


//传入目的地址和端口号,那么使用指定的地址和端口号去访问public Jedis(String host, int port)
复制代码

(2)通过配置文件进行连接


在 springboot 中,当然是可以通过配置文件的形式来设置各种连接参数了,Redis 也是一样的,


在 yml 文件中进行如下配置:


注意:这是没有使用连接池的,如果使用连接池,需要在下边增加配置,关于使用连接池的可以继续往下看。


##redis配置信息spring:  redis:    database: 0 #redis数据库索引,默认为0    host: 127.0.0.1 #redis服务器地址    port: 6379 #redis服务器连接端口    password: #redis服务器连接密码,默认为null    timeout: 5000 #redis连接超时时间
复制代码


通过配置文件来进行配置之后,我们就可以使用 springboot 中的一个工具类来操作 Redis 的操作了,springboot 会自动读取配置文件中的配置信息,然后通过该配置信息去连接 Redis 服务器,springboot 中提供操作 Redis 的工具类有两个,分别是:StringRedisTemplate 和 RedisTemplate


StringRedisTemplate 和 RedisTemplate 的区别如下


  • 在进行序列化时,RedisTemplate 使用的是 JdkSerializationRedisSerializer,而 StringRedisTemplate 使用的是 StringRedisSerializer

  • StringRedisTemplate 继承了 RedisTemplate<String,String>,而 RedisTemplate 定义为 RedisTemplate<K, V>,所有 StringRedisTemplate 就限定了 K,V 为 String 类型的


相同处体现在他们对 Redis 的操作上,RedisTemplate 和 StringRedisSerializer 都定义了五种对 Redis 的操作,分别对应这 Redis 中的五种数据类型。


redisTemplate.opsForValue();  //操作字符串redisTemplate.opsForHash();   //操作hashredisTemplate.opsForList();   //操作listredisTemplate.opsForSet();    //操作setredisTemplate.opsForZSet();   //操作有序set
复制代码


那么在使用的时候,这两个类应该如何选择呢?


如果你的 redis 数据库里面本来存的是字符串数据,或者你要存取的数据就是字符串类型数据的时候,那么你就使用 StringRedisTemplate 即可,但是如果你的数据是复杂的对象类型,而取出的时候又不想做任何的数据转换,直接从 Redis 里面取出一个对象,那么使用 RedisTemplate 是更好的选择。


接下来我以 StringRedisSerializer 为例子,来给大家演示一下使用 StringRedisSerializer 操作 Redis 的方法


/**     * springboot主从连接测试,     * 使用springRedisTemplate操作     */    @Test    public void redisTest06() {//        操作字符型        stringRedisTemplate.opsForValue().set("test06","Test06");        System.out.println(stringRedisTemplate.opsForValue().get("test06"));
// 设置key的过期时间,30秒 stringRedisTemplate.expire("test06", 30 * 1000, TimeUnit.MILLISECONDS);
// 根据key获取过期时间 Long test06ExpireTime = stringRedisTemplate.getExpire("test06"); System.out.println("根据key获取过期时间:" + test06ExpireTime);
// 根据key获取过期时间,并且换算成指定单位 Long test06ExpireTimeToUnit = stringRedisTemplate.getExpire("test06", TimeUnit.SECONDS); System.out.println("根据key获取过期时间,并且换算成指定单位:" + test06ExpireTimeToUnit);
// 检查key是否存在,返回布尔类型 Boolean test06IsExist = stringRedisTemplate.hasKey("test06"); System.out.println("检查key是否存在,返回布尔类型:" + test06IsExist);
}
复制代码


在上面的操作中,有一点关于获取和设置 key 过期时间的操作,当时在操作的时候对其进行了一下探究,在这里分享给大家


stringRedisTemplate 中获取过期时间的 getExpire()方法的说明


如果最开始没有设置过期时间,那么就返回-1,数据在没有达到 Redis 数据最大限额的情况下会一直存在。

如果设置了过期时间,但是数据还未过期,就返回剩余时间,如果到了过期时间,那么数据会被删除。

如果数据被删除或者不存在,那么就返回-2。


​​点击关注,第一时间了解华为云新鲜技术~

发布于: 刚刚阅读数: 2
用户头像

提供全面深入的云计算技术干货 2020.07.14 加入

华为云开发者社区,提供全面深入的云计算前景分析、丰富的技术干货、程序样例,分享华为云前沿资讯动态,方便开发者快速成长与发展,欢迎提问、互动,多方位了解云计算! 传送门:https://bbs.huaweicloud.com/

评论

发布
暂无评论
不会用SpringBoot连接Redis,那就赶紧看这篇