SpringBoot集成redis(自用)v2
- v1:SpringBoot集成redis
- v2:追加了jedis,更灵活地操作redis,如清除过期时间(永不过期)
pom.xml
<!--redis缓存-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<!--Jedis是一种Java操作Redis的简单而强大的工具库-->
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
</dependency>
application.yml
spring:
application:
name: ktc-article #指定服务名
datasource:
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://192.168.000.000:3308/ktc_article?characterEncoding=UTF8
username: root
password: admin
jpa:
properties:
hibernate:
format_sql: true # 格式化sql
show_sql: true # 显示sql
redis:
host: 192.168.203.130
port: 6379
# password: #输入redis数据库密码
jedis:
pool:
max-active: 10 #最大连接数
max-idle: 6 #最大空闲数
min-idle: 2 #最小空闲数
max-wait: #最大阻塞等待时间,默认-1 无限期等待
timeout: 2000 #redis连接超时
JedisConfig配置类(主要是对redis进行连接,也选择可以改Jeids源代码(在里边加上连接代码))
package com.ktc.article.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;
@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+"\t"+port);
return jedisPool;
}
}
ArticleService
import org.springframework.data.redis.core.RedisTemplate;
import redis.clients.jedis.JedisPool;
@Autowired
private RedisTemplate redisTemplate;
@Autowired
private JedisPool jedisPool;
public Article findById(String id) {
//设置缓存时间
// redisTemplate.opsForValue().set("article_" + id, article,1, TimeUnit.DAYS);
// redisTemplate.opsForValue().set("article_" + id, article,10, TimeUnit.SECONDS);
//redisTemplate没有清除过期时间的方法(也可能是我没找到),只能将过期时间设置为最大值
// redisTemplate.opsForValue().set("article_" + id, article, Long.MAX_VALUE);
Article article = (Article) redisTemplate.opsForValue().get("article_" + id);
//如果为空那么从数据库获取,存入redis
if (article == null) {
article = articleDao.findById(id).get();
redisTemplate.opsForValue().set("article_" + id, article);
//jedis对redis操作命令比较全,同时也更偏向redis库的操作命令,可以参考redis的操作命令进行操作,
// 可查看我之前发的redis五种数据类型及操作的文章https://juejin.cn/post/7263705320768487481
// Jedis jedis = jedisPool.getResource();
// jedis.set("article_" + id, String.valueOf(article));
// //清除redis过期时间(即永不过期)
// jedis.persist("article_" + id);
}
return article;
}
注意
用reids做二级缓存时,涉及到实体类需要给实体类加上 implements Serializable,否则会报错:DefaultSerializer requires a Serializable payload but received an object of type
相关资料
SpringBoot整合Jedis_springboot jedis_起个名字是真的南的博客-CSDN博客
关于redisTemplate存储,本地redis客户端查找不到问题:关于redisTemplate.opsForValue().set数据本地redis客户端库中查不到问题的解决记录_redistemplate.opsforvalue.set_北溟南风起的博客-CSDN博客