使用SpringBoot中整合Redis

目录

  • SpringBoot中整合Redis
  • SpringBoot整合Redis改不了database问题

SpringBoot中整合Redis 本次,我们以IDEA + SpringBoot作为 Java中整合Redis的使用 的测试环境,如果对创建SpringBoot项目有不清楚的地方,可以参考这篇文章:使用Idea创建我的第一个SpringBoot项目
【使用SpringBoot中整合Redis】首先,我们需要导入Redis的maven依赖
org.springframework.bootspring-boot-starter-data-redis

其次,我们需要在配置文件中配置你的Redis配置信息,我使用的是 .yml文件格式
# redis配置spring:redis:# r服务器地址host: 127.0.0.1# 服务器端口port: 6379# 数据库索引(默认0)database: 0jedis: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 **/@Componentpublic class RedisUtil {@Autowiredprivate RedisTemplate 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)@SpringBootTestpublic class TestApplicationTest {@Resourceprivate RedisUtil redisUtil; @Testpublic void setRedis() {boolean res = redisUtil.set("jay", "周杰伦 - 《以父之名》"); System.out.println(res); }@Testpublic void getRedis() {String res = redisUtil.get("jay"); System.out.println(res); }@Testpublic void updateRedis() {boolean res = redisUtil.update("jay", "周杰伦 - 《夜的第七章》"); System.out.println(res); }@Testpublic void delRedis() {boolean res = redisUtil.del("jay"); System.out.println(res); } @Testpublic void hasKey() {boolean res = redisUtil.hasKey("jay"); System.out.println(res); } @Testpublic void expire() {boolean res = redisUtil.setExpire("jay", 100); System.out.println(res); }@Testpublic void getExpire() {long res = redisUtil.getExpire("jay"); System.out.println(res); } @Testpublic 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: 15host: 127.0.0.1port: 6379password:timeout: 3000ms # 连接超时时间(毫秒)

但是springboot自动装配一直是database为0
最后发现是没有找到我配置的redis,默认是用的自动装配的默认地址(所以我一直以为我的yaml写对了,但是没用写对,因为一直没有取到我的值)
自动装配的就是
database=0,port=6379;无密码,host=localhost,
就是因为这个原因,我写的数据能进入我的本地redis中,所以我一直没找到问题,因为我也使用的本地的redis测试的,一直找不到为什么改不了database。
最后发现是我的yaml文件的redis写错了,把redis写到log下面,并且归属于log。
最后该成归属于spring下面就可以了。
注意:一定要注意yaml的书写规范和上下级的关系。
深刻的教训,我在网上查了很多,也没找到对应的办法,幸好没有,不然的话,我的代码会被改的乱七八糟的,花了一下午才发现是自己yaml写错了。
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

    推荐阅读