现在Spring Boot 2.x版本的推荐使用RedisTemplate,他封装了letture
我们在使用springboot搭建微服务的时候,在很多时候还是需要redis的高速缓存来缓存一些数据,存储一些高频率访问的数据,如果直接使用redis的话又比较麻烦,这里我们使用jedis来实现redis缓存来达到高效缓存的目的。
准备工作
创建一个Spring Boot项目
安装好Redis和Redis可视化工具
.
导入Jedis依赖
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
</dependency>
因为Spring Boot内默认引用了Jedis版本,所以无需配置Jedis的版本号
.
application.yml
修改application.properties为application.yml,然后添加下面的配置信息
server:
port: 8080
spring:
redis:
port: 6379 # redis端口
password: 123456 # redis登录密码
host: 192.168.17.128 # redis的ip地址,我redis安装在我电脑的linux虚拟机中
jedis:
pool:
max-idle: 6 #最大空闲数
max-active: 10 #最大连接数
min-idle: 2 #最小空闲数
timeout: 2000 #连接超时
.
编写config
创建一个类,代码如下
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;
/**
* Jedis配置
*/
@Configuration
public class JedisConfig {
private Logger logger = LoggerFactory.getLogger(JedisConfig.class);
@Value("${spring.redis.host}")
private String host;
@Value("${spring.redis.port}")
private int port;
@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.min-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, port, timeout, password);
logger.info("JedisPool 连接成功:" + host + ":" + port);
return jedisPool;
}
}
.
测试
在test
创建一个测试类(Spring Boot一般默认创建好了),代码如下
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import redis.clients.jedis.JedisPool;
@SpringBootTest
class SpringbootJedisApplicationTests {
@Autowired
private JedisPool jedisPool;
@Test
void contextLoads() {
System.out.println(jedisPool);
}
}
如果可以查看到JedisPool的信息说明连接成功

.
一个简单例子
编写一个封装JedisPool的工具类,代码如下:
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
@Component
public class JedisUtil {
@Autowired
private JedisPool jedisPool;
/**
* 获取Jedis
*/
public Jedis getJedis() {
return jedisPool.getResource();
}
/**
* 关闭Jedis连接
*/
public void close(Jedis jedis) {
if(jedis != null) {
jedis.close();
}
}
// .....可以自行封装其他方法
}
编写一个接口和实现类,代码如下
public interface UserService {
/**
* 输入一个key
* 判断Redis中是否存在该数据
* 存在则在Redis中查询并返回,
* 否则在MySQL数据库中查询将结果赋值给Redis并返回
* @param key
* @return
*/
public String getString(String key);
}
import com.trq.springbootjedis.Service.UserService;
import com.trq.springbootjedis.Util.JedisUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import redis.clients.jedis.Jedis;
@Service
public class UserServiceImpl implements UserService {
private Logger logger = LoggerFactory.getLogger(UserServiceImpl.class);
@Autowired
private JedisUtil jedisUtil;
@Override
public String getString(String key) {
// 获取Jedis对象
Jedis jedis = jedisUtil.getJedis();
String val = null;
// 判断key是否存在于Redis
if(jedis.exists(key)) {
val = jedis.get(key);
logger.info(key + "是在Redis中查询到的,值为" + val);
} else {
val = "test"; // 模拟从MySQL中查询到的数据
logger.info(key + "是在MySQL中查询到的,值为" + val);
jedis.set(key, val);
logger.info(key + "存入Redis中,值为" + val);
}
// 关闭jedis
jedisUtil.close(jedis);
return val;
}
}
此时我的Redis中的数据情况如下:

.
进行第一次测试,控制台输出如下:

.
再次查看Redis中的数据情况如下:

.
进行第二次测试,控制输出如下:

.
网友评论