使用SpringBoot中整合Redis

 更新时间:2022年06月07日 10:38:26   作者:Asurplus  
这篇文章主要介绍了使用SpringBoot中整合Redis,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

SpringBoot中整合Redis

本次,我们以IDEA + SpringBoot作为 Java中整合Redis的使用 的测试环境,如果对创建SpringBoot项目有不清楚的地方,可以参考这篇文章:使用Idea创建我的第一个SpringBoot项目

首先,我们需要导入Redis的maven依赖

<!-- Redis的maven依赖包 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>

其次,我们需要在配置文件中配置你的Redis配置信息,我使用的是 .yml文件格式 

# redis配置
spring:
  redis:
    # r服务器地址
    host: 127.0.0.1
    # 服务器端口
    port: 6379
    # 数据库索引(默认0)
    database: 0
    jedis:
      pool:
        # 连接池最大连接数(使用负值表示没有限制)
        max-active: 50
        # 连接池最大阻塞等待时间(使用负值表示没有限制)
        max-wait: 3000ms
        # 连接池中的最大空闲连接数
        max-idle: 20
        # 连接池中的最小空闲连接数
        min-idle: 2
    # 连接超时时间(毫秒)
    timeout: 5000ms

然后,我们需要创建一个RedisUtil来对Redis数据库进行操作

package com.zyxx.test.utils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Component;

/**
 * @ClassName RedisUtil
 * @Author Lizhou
 * @Date 2019-08-03 17:29:29
 * @Version 1.0
 **/
@Component
public class RedisUtil {

    @Autowired
    private RedisTemplate<String, String> template;

    /**
     * 读取数据
     *
     * @param key
     * @return
     */
    public String get(final String key) {
        return template.opsForValue().get(key);
    }

    /**
     * 写入数据
     */
    public boolean set(final String key, String value) {
        boolean res = false;
        try {
            template.opsForValue().set(key, value);
            res = true;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return res;
    }

    /**
     * 根据key更新数据
     */
    public boolean update(final String key, String value) {
        boolean res = false;
        try {
            template.opsForValue().getAndSet(key, value);
            res = true;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return res;
    }

    /**
     * 根据key删除数据
     */
    public boolean del(final String key) {
        boolean res = false;
        try {
            template.delete(key);
            res = true;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return res;
    }
    
	/**
     * 是否存在key
     */
    public boolean hasKey(final String key) {
        boolean res = false;
        try {
            res = template.hasKey(key);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return res;
    }

	/**
     * 给指定的key设置存活时间
     * 默认为-1,表示永久不失效
     */
    public boolean setExpire(final String key, long seconds) {
        boolean res = false;
        try {
            if (0 < seconds) {
                res = template.expire(key, seconds, TimeUnit.SECONDS);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return res;
    }

    /**
     * 获取指定key的剩余存活时间
     * 默认为-1,表示永久不失效,-2表示该key不存在
     */
    public long getExpire(final String key) {
        long res = 0;
        try {
            res = template.getExpire(key, TimeUnit.SECONDS);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return res;
    }

	/**
     * 移除指定key的有效时间
     * 当key的有效时间为-1即永久不失效和当key不存在时返回false,否则返回true
     */
    public boolean persist(final String key) {
        boolean res = false;
        try {
            res = template.persist(key);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return res;
    }    
}

最后,我们可以使用单元测试来检测我们在RedisUtil中写的操作Redis数据库的方法

package com.zyxx.test;
import com.zyxx.test.utils.RedisUtil;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import javax.annotation.Resource;

@RunWith(SpringRunner.class)
@SpringBootTest
public class TestApplicationTest {

    @Resource
    private RedisUtil redisUtil;

    @Test
    public void setRedis() {
        boolean res = redisUtil.set("jay", "周杰伦 - 《以父之名》");
        System.out.println(res);
    }

    @Test
    public void getRedis() {
        String res = redisUtil.get("jay");
        System.out.println(res);
    }

    @Test
    public void updateRedis() {
        boolean res = redisUtil.update("jay", "周杰伦 - 《夜的第七章》");
        System.out.println(res);
    }

    @Test
    public void delRedis() {
        boolean res = redisUtil.del("jay");
        System.out.println(res);
    }

	@Test
    public void hasKey() {
        boolean res = redisUtil.hasKey("jay");
        System.out.println(res);
    }

	@Test
    public void expire() {
        boolean res = redisUtil.setExpire("jay", 100);
        System.out.println(res);
    }

    @Test
    public void getExpire() {
        long res = redisUtil.getExpire("jay");
        System.out.println(res);
    }

	@Test
    public void persist() {
        boolean res = redisUtil.persist("jay");
        System.out.println(res);
    }    
}

推荐使用Redis客户端(redis-desktop-manager)来查看Redis数据库中的数据

至此,我们在日常项目中整合Redis的基本使用操作就完成了,但在实际项目中,可能会涉及到更复杂的用法,可以根据你的业务需求调整Redis的使用即可。

SpringBoot整合Redis改不了database问题

关于学习redis写的yaml文件,里面的

redis:
  database: 15
  host: 127.0.0.1
  port: 6379
  password:
  timeout: 3000ms # 连接超时时间(毫秒)

但是springboot自动装配一直是database为0

最后发现是没有找到我配置的redis,默认是用的自动装配的默认地址(所以我一直以为我的yaml写对了,但是没用写对,因为一直没有取到我的值)

自动装配的就是

database=0,port=6379;无密码,host=localhost,

就是因为这个原因,我写的数据能进入我的本地redis中,所以我一直没找到问题,因为我也使用的本地的redis测试的,一直找不到为什么改不了database。

最后发现是我的yaml文件的redis写错了,把redis写到log下面,并且归属于log。

最后该成归属于spring下面就可以了。

注意:一定要注意yaml的书写规范和上下级的关系。

深刻的教训,我在网上查了很多,也没找到对应的办法,幸好没有,不然的话,我的代码会被改的乱七八糟的,花了一下午才发现是自己yaml写错了。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Netty进阶之ChannelPoolMap源码解析

    Netty进阶之ChannelPoolMap源码解析

    这篇文章主要介绍了Netty进阶之ChannelPoolMap源码解析,ChannelPoolMap是用来存储ChannelPool和指定key的一个集合Map,实际的应用场景就是服务器端是一个分布式集群服务,拥有多个配置地址,这样我们就可以配置多个服务地址,减轻单台服务器的压力,需要的朋友可以参考下
    2023-11-11
  • java连接SQL Server数据库的方法

    java连接SQL Server数据库的方法

    这篇文章主要为大家详细介绍了java连接SQL Server数据库的方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-10-10
  • 解决springboot的JPA在Mysql8新增记录失败的问题

    解决springboot的JPA在Mysql8新增记录失败的问题

    这篇文章主要介绍了解决springboot的JPA在Mysql8新增记录失败的问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-06-06
  • Mybatis日志参数快速替换占位符工具的详细步骤

    Mybatis日志参数快速替换占位符工具的详细步骤

    这篇文章主要介绍了Mybatis日志参数快速替换占位符工具的详细步骤,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-08-08
  • 深入学习Spring Cloud-Ribbon

    深入学习Spring Cloud-Ribbon

    这篇文章主要介绍了Spring Cloud-Ribbon的相关知识,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友一起看看吧
    2021-03-03
  • 关于工厂方法模式的Java实现

    关于工厂方法模式的Java实现

    这篇文章主要介绍了关于工厂方法模式的Java实现讲解,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-03-03
  • Java提取2个集合中的相同和不同元素代码示例

    Java提取2个集合中的相同和不同元素代码示例

    这篇文章主要介绍了Java提取2个集合中的相同和不同元素代码示例,涉及对removeall方法的简单介绍,然后分享了主要的示例代码,具有一定借鉴价值,需要的朋友可以参考下。
    2017-11-11
  • Java多线程用法的实例详解

    Java多线程用法的实例详解

    这篇文章主要介绍了Java多线程用法的实例详解的相关资料,希望通过本文大家能够理解掌握这部分内容,需要的朋友可以参考下
    2017-09-09
  • Java MyBatis本地缓存原理详解

    Java MyBatis本地缓存原理详解

    这篇文章主要介绍了Java MyBatis本地缓存原理详解,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-07-07
  • javax.validation包里@NotNull等注解的使用方式

    javax.validation包里@NotNull等注解的使用方式

    这篇文章主要介绍了javax.validation包里@NotNull等注解的使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-01-01

最新评论