不会用springboot连接redis,那就赶紧看这篇(代码片段)

华为云开发者社区 华为云开发者社区     2023-03-09     507

关键词:

摘要:如何通过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.

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

springboot定时任务重启生效

参考技术A有时候缓存的数据量非常大,如果这个时候服务宕机了,且开启了redis的持久化功能,重新启动服务,数据基本上不会丢。redis可以做内存共享,因为它可以被多个不同的客户端连接。做为mysql等数据库的缓存,是把部... 查看详情

springboot连接redis哨兵模式

...bind0.0.0.0【注】redisTemplate实际上是对其他框架的的封装,springboot2.x以上底层实现由jedis变为了lettuce。而且lettuce会根据配置自动选择是否用单机或者哨兵模式。【1】Redis哨兵模式设置密码【2】sentinel搭建redis集群经验总结【3】Spri... 查看详情

java架构之路-(redis专题)springboot连接redis超简单

...,但是我们一直还未投入到实战中去,这次我们用jedis和springboot两种方式来操作一下我们的redis主从架构  如何配置我上次已经讲过了,https://www.cnblogs.com/cxiaocai/p/11711377.html。我们这次主要看如何用java来操作redis,先来复习一... 查看详情

记录自己搭建的redissentenal,用redisdesktopmanager可以连接但是springboot不能连接的问题

背景:自己搭建的Linux环境的redis哨兵集群,配置文件如下根据该链接 https://juejin.im/post/5b7d226a6fb9a01a1e01ff64其中 sentenal的配置文件为:分别拷贝三份redis-sentinel.conf文件到/usr/local/redis-sentinel目录下面。三个配置文件分别对... 查看详情

springboot连接redis(代码片段)

前言随着数据量的日益增长,很多时候如果直接用SELECT*FROMXXX这些SQL语句来对上千万的数据进行查询,那耗费的时间可想而知。作为用户一方,肯定希望系统响应越快越好,没什么人喜欢点一个按钮要等到吃完一... 查看详情

redis过期删除策略和内存淘汰策略

...key过期,需要得到通知,做业务处理的,可以做此监听。springboot整合Redis参考,SpringBoot整合Redis-(jianshu.com)在整合Redis的基础上,在新加监听配置监听配置类监听类将Redis用作缓存时,如果内存空间用满,就会自动驱逐老的数据。... 查看详情

springboot连接redis密码验证失败

由于测试环境连接redis时没有用密码,服务一切都正常!发到生产时登录系统,在处理功能的时候老报错,查看错误是连接redist失败,查看redis服务正常,redis密码对了一遍又一遍也没错啊~~~~真是活见鬼,那么问题是怎么出现的... 查看详情

springboot连接redis错误io.lettuce.core.rediscommandtimeoutexception:

springboot连接redis报错超时连接不上 可以从以下方面排查1查看自己的配置文件信息,把超时时间不要设置0毫秒设置5000毫秒  2redis服务长时间不连接就会休眠,也会连接不上重新启动redis服务《黑窗口》  查看详情

springboot+redis

Jedis和LettuceSpringboot2.x之后连接Redis默认使用的是Lettuce,2.x之前默认使用的是Jedis。JedisJedis在实现上是直接连接的RedisServer,如果在多线程环境下是非线程安全的。每个线程都去拿自己的Jedis实例,当连接数量增多时,资源消耗阶... 查看详情

springboot与redis缓存管理

...篇博客是前面https://www.cnblogs.com/shijinglu2018/p/12258646.html(SpringBoot与MyBatis/Redis整合)的延续。为什么要使用MyBatis?为什么要使用Redis?    用MyBatis是进行java连接数据库的一种封装和简化,方便去调用,过程中不用过... 查看详情

redistemplate连接池用完了不需要返回吗

...不够用了我用的是redisTemplate来操作redis,而redisTemplate并不会自动释放连接有一个方法,就是加大最大连接数,但是治标不治本,加到redis.maxIdle=1000了,看似够大了,但连接数一直在增加,迟早会崩找了很久,最后发现这个方法... 查看详情

springboot连接linux服务器上的redis

本文章为给新手学习springboot远程连通redis提供一个学习参考.环境是intellijidea(window)+redis(linux虚拟机-vmware)。首先在linux安装好redis,这里网上一堆教程,这里不再赘述。我用的是centos7,等安装完成ping通之后,接下来开始正... 查看详情

centos7环境下搭建redis及springboot连接集成

1.官方下载安装文件redis-4.0.2版本、解压、编译(gcc、tcl),maketest 没问题则编译成功2.切换到redis目录,执行src/redis-server redis.conf &redis.conf内容 注意2点a)注释bind127.0.0.1 b)关闭保护模式,允许其他IP远程连接3... 查看详情

springboot+redis实现分布式锁,还有谁不会??(代码片段)

作者:jingQ来源:https://www.sevenyuan.cn/一、业务背景有些业务请求,属于耗时操作,需要加锁,防止后续的并发操作,同时对数据库的数据进行操作,需要避免对之前的业务造成影响。二、分析流程使用R... 查看详情

springboot+redis实现分布式锁,还有谁不会??(代码片段)

作者:jingQ来源:https://www.sevenyuan.cn/一、业务背景有些业务请求,属于耗时操作,需要加锁,防止后续的并发操作,同时对数据库的数据进行操作,需要避免对之前的业务造成影响。二、分析流程使用R... 查看详情

springboot连接redis-sentinel模式

一、引入pom   <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency>二、配置YML文件server:port:80spring:r 查看详情

springboot连接redis-sentinel模式

一、引入pom   <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency>二、配置YML文件server:port:80spring:r 查看详情

springboot2.x整合redis以及连接哨兵模式/集群模式

依赖:<!--spirngboot版本为2.x--><!--加载springbootredis包,springboot2.0中直接使用jedis或者lettuce配置连接池,默认为lettuce连接池,这里使用jedis连接池--><!--加载springbootredis包--><dependency> <groupId>org.spr 查看详情