使用SpringBoot中整合Redis
目录
- SpringBoot中整合Redis
- SpringBoot整合Redis改不了database问题
SpringBoot中整合Redis 本次,我们以IDEA + SpringBoot作为 Java中整合Redis的使用 的测试环境,如果对创建SpringBoot项目有不清楚的地方,可以参考这篇文章:使用Idea创建我的第一个SpringBoot项目
【使用SpringBoot中整合Redis】首先,我们需要导入Redis的maven依赖
org.springframework.boot spring-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写错了。
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
推荐阅读
- js中forEach的用法之forEach与for之间的区别
- Java NIO Selector 的使用
- #yyds干货盘点# NPOI在Excel中的简单用法汇总
- Python使用Tkinter创建GUI标记表
- Python使用Bokeh进行数据可视化
- Python使用OpenCV对图像进行灰度缩放
- Python Tkinter中的forget_pack()和forget_grid()用法
- Python Tkinter中的geometry方法用法示例
- Python Tkinter中的grid()方法用法示例
- #导入Word文档图片# Linux下automake工具使用(自动构建Makefile文件)