SringBoot整合Jedis
SpringBoot整合Redis
简介
使用springboot搭建微服务的时候,在很多时候还是需要Redis的高速缓存来缓存一些数据,存储一些高频率访问的数据,如果直接使用redis的话有比较麻烦,在这里,我们使用redis来实现jedis缓存达到高效缓存的目的
引入Jedis依赖
<!--Jedis依赖-->
<dependency>
<groupId>redis.clients</groupId>r
<artifactId>jedis</artifactId>
<version>3.2.0</version>
</dependency>
SpringBoot 内默认引用了jedis版本
所有直接引入Jedis就好了
application.yml
spring:
redis:
port: 6379
password:
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);
}
操作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的
Test第一次测试
@Autowired
private UserService userService;
/**
* 模拟Jedis操作Redis String 类型的数据
*
*/
@Test
void T1(){
String name = userService.getString("name");
System.out.println(name);
}
Test第二次测试
可以看到直接去redis数据库中取