使用SpringBoot中整合Redis

网友投稿 283 2022-07-26


目录SpringBoot中整合RedisSpringBoot整合Redis改不了database问题

SpringBoot中整合Redis

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

首先,我们需要导入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: 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 template;

/**

* 读取数据

*

* @param key

* @return

*/

public String get(final String key) {

rEoFfkteturn 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;

trEoFfkty {

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

http:// */

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写错了。


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:SpringBoot如何使用自定义注解实现接口限流
下一篇:SpringBoot教程_创建第一个SpringBoot项目
相关文章

 发表评论

暂时没有评论,来抢沙发吧~