首先说明,样例的项目全做的查询操作,所以没有去介绍其他的几个注解
首先引入springboot 整合redis的jar包依赖
<!-- 把springboot版本说明-->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.1.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<!--这个才是主角-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
其次 上配置文件
spring:
redis:
host: 127.0.0.1
database: 0
port: 6383
password: xxxxx
# 连接超时时间(毫秒)
timeout: 5000
jedis:
pool:
# 连接池最大连接数(使用负值表示没有限制)
max-active: 10
# 连接池最大阻塞等待时间(使用负值表示没有限制)
max-wait: -1
# 连接池中的最大空闲连接
max-idle: 5
# 连接池中的最小空闲连接
min-idle: 0
接着,上配置类
@Configuration
@EnableCaching
public class RedisConfig extends CachingConfigurerSupport {
private static final Logger logger = LoggerFactory.getLogger(RedisConfig.class);
@Bean
public RedisCacheConfiguration redisCacheConfiguration(){
return RedisCacheConfiguration
.defaultCacheConfig()
.entryTtl(Duration.ofHours(8))
.serializeKeysWith(RedisSerializationContext
.SerializationPair
.fromSerializer(new StringRedisSerializer()))
.serializeValuesWith(RedisSerializationContext
.SerializationPair
.fromSerializer(new GenericJackson2JsonRedisSerializer()));
}
@Override
@Bean
public CacheErrorHandler errorHandler() {
// 异常处理,当Redis发生异常时,打印日志,但是程序正常走
logger.info("初始化 -> [{}]", "Redis CacheErrorHandler");
return new CacheErrorHandler() {
@Override
public void handleCacheGetError(RuntimeException e, Cache cache, Object key) {
logger.error("Redis occur handleCacheGetError:key -> [{}]", key, e);
}
@Override
public void handleCachePutError(RuntimeException e, Cache cache, Object key, Object value) {
logger.error("Redis occur handleCachePutError:key -> [{}];value -> [{}]", key, value, e);
}
@Override
public void handleCacheEvictError(RuntimeException e, Cache cache, Object key) {
logger.error("Redis occur handleCacheEvictError:key -> [{}]", key, e);
}
@Override
public void handleCacheClearError(RuntimeException e, Cache cache) {
logger.error("Redis occur handleCacheClearError:", e);
}
};
}
}
这里上面注释了@Configuration,需要被@SpringBootApplication注解扫到,不然这个配置就等于没作用,至于怎么让它被扫描到,可以把这个配置文件放到低于Application启动类低一个level的package里面
eg
|-- src/main/java/com.xxx.xx/config/RedisConfig.java
|-- src/main/java/com.xxx.xx/Application.java
四部曲已经到了最后一步,那就是使用举例
@Service
@CacheConfig(cacheNames = {"base-info"}) //这个是对每个类都有一个分层
public class BaseInfoServiceImpl implements IBaseInfoService {
// 这里全部都是查询,所以使用了@Cachable注解,至于用于更新和删除的注解可以自行百度,很简单
@Override
@Cacheable(key = "targetClass + methodName")
public xxxDTO getDto() {
return xxx;
}
}
最后,当然是看效果这里推荐使用Redis Desktop Mananger 看效果
如果觉得JSON形式的序列化和反序列化效率低,想使用二进制的,可以使用Kryo序列化方式,只需要上面的RedisConfig中
.serializeValuesWith(RedisSerializationContext
.SerializationPair
.fromSerializer(new GenericJackson2JsonRedisSerializer()));
// 修改new GenericJackson2JsonRedisSerializer() 替换为其他的