微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

摘要如何通过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
     */
    @Test
    public 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();   //操作hash
redistemplate.opsForList();   //操作list
redistemplate.opsForSet();    //操作set
redistemplate.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.

 

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐