SpringBoot整合Redis

简介

使用springboot搭建微服务的时候,在很多时候还是需要Redis的高速缓存来缓存一些数据,存储一些高频率访问的数据,如果直接使用redis的话有比较麻烦,在这里,我们使用redis来实现jedis缓存达到高效缓存的目的

引入Jedis依赖

<!--Jedis依赖-->
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>3.2.0</version>
</dependency>


SpringBoot 内默认引用了jedis版本

所有直接引入Jedis就好了


application.yml

spring:
redis:
port: 6379
password: rzkruizhukai123.
host: 47......
jedis:
pool:
max-active: 10 #最大连接数
max-idle: 6 #最大空闲数
min-idle: 2 #最小空闲数
timeout: 2000 #连接超时

编写Config

创建💻com.rzk.config.jedis.jedisConfig

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;

/**
* fileName:JedisConfig
* description:
* author:rzk
* createTime:2020/7/16 15:24
* versioni:1.0.0
*/
@Configuration
public class JedisConfig {

private Logger logger = LoggerFactory.getLogger(JedisConfig.class);

@Value("$(spring.redis.host)")
private String host;

@Value("$(spring.redis.prot)")
private int prot;

@Value("$(spring.redis.password)")
private String password;

@Value("$(spring.redis.timeout)")
private int timeout;

@Value("$(spring.redis.jedis.pool.max-active)")
private int maxActive;

@Value("$(spring.redis.jedis.pool.max-idle)")
private int maxIdle;

@Value("$(spring.redis.jedis.pool.mix-idle)")
private int minIdle;

@Bean
public JedisPool jedisPool(){
JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
jedisPoolConfig.setMaxIdle(maxIdle);
jedisPoolConfig.setMinIdle(minIdle);
jedisPoolConfig.setMaxTotal(maxActive);

JedisPool jedisPool = new JedisPool(jedisPoolConfig, host, prot, timeout, password);
logger.info("JedisPool连接成功"+host+"\t"+prot);
return jedisPool();
}import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;

/**
* fileName:JedisConfig
* description:
* author:rzk
* createTime:2020/7/16 15:24
* versioni:1.0.0
*/
@Configuration
public class JedisConfig {

private Logger logger = LoggerFactory.getLogger(JedisConfig.class);

@Value("${spring.redis.host}")
private String host;

@Value("${spring.redis.password}")
private String password;

@Value("${spring.redis.port}")
private Integer port;

@Value("${spring.redis.timeout}")
private Integer timeout;

@Value("${spring.redis.jedis.pool.max-active}")
private int maxActive;

@Value("${spring.redis.jedis.pool.min-idle}")
private int minIdle;

@Value("${spring.redis.jedis.pool.max-idle}")
private int maxIdle;

@Bean
public JedisPool jedisPool(){
JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
jedisPoolConfig.setMaxIdle(maxIdle);
jedisPoolConfig.setMinIdle(minIdle);
jedisPoolConfig.setMaxTotal(maxActive);

JedisPool jedisPool = new JedisPool(jedisPoolConfig, host, port, timeout, password);
logger.info("JedisPool连接成功"+host+"\t"+port);
return jedisPool;
}
}

测试

@SpringBootTest
class SpringbootJedisApplicationTests {

@Autowired
private JedisPool jedisPool;

@Test
void contextLoads() {
System.out.println(jedisPool);
}

SringBoot整合Jedis_数据

操作String类型

新建Service

接口

public interface UserService {
/**
* Redis String 类型
* 需求: 用户输入一个 key
* 先判断Redis中是否存在该数据
*
* 如果存在,在Redis中进行查询,并返回
* 如果不存在,在MySQL数据库查询,将结果赋给Redis,并返回
*/

public String getString(String key);
}

实现类

@Service
@Log
public class UserServiceImpl implements UserService {
@Autowired
private JedisPool jedisPool;//JedisPool Jedis连接池
/**
* Redis String 类型
* 需求: 用户输入一个 key
* 先判断Redis中是否存在该数据
*
* 如果存在,在Redis中进行查询,并返回
* 如果不存在,在MySQL数据库查询,将结果赋给Redis,并返回
* @Param key
*/
@Override
public String getString(String key) {
String val = null;
//1.得到Jedis对象,就要判断他存不存在
Jedis jedis = jedisPool.getResource();
//2.是否存在Key,如果他为true就存在
if (jedis.exists(key)){
log.info("查询Redis中的数据");
val = jedis.get(key);
}else{
val="Rzk";
log.info("查询的是Mysql数据库"+val);
jedis.set(key,val);
return val;
}
//3.关闭连接
jedis.close();
return val;
}
}

在redis数据库查看有没有key值


此时Redis数据库是没有name的
SringBoot整合Jedis_spring_02


Test第一次测试

@Autowired
private UserService userService;
/**
* 模拟Jedis操作Redis String 类型的数据
*
*/
@Test
void T1(){
String name = userService.getString("name");
System.out.println(name);
}

SringBoot整合Jedis_数据_03

Test第二次测试


可以看到直接去redis数据库中取
SringBoot整合Jedis_数据_04