从零搭建Spring Boot脚手架(6):整合Redis作为缓存
2021-04-01 09:27
标签:led manager group 一起 java java 8 artifact 场景 nal 上一文我们整合了Mybatis Plus,今天我们会把缓存也集成进来。缓存是一个系统应用必备的一种功能,除了在减轻数据库的压力之外。还在存储一些短时效的数据场景中发挥着重大作用,比如存储用户Token、短信验证码等等,目前缓存的选型还是比较多的,EHCACHE、HAZELCAST、CAFFEINE、COUCHBASE以及本文要整合的REDIS。接下来我们将会在kono脚手架项目中集成Spring Cache以及Redis。 Gitee: https://gitee.com/felord/kono day05 分支 GitHub: https://github.com/NotFound403/kono day05 分支 使项目具有缓存功能,同时将默认的JDK序列化修改为Jackson序列化以存储一些对象,同时实现一些特定的个性化的缓存空间以满足不同场景下的不同缓存TTL时间需求。 目前只需要引入下面的依赖即可: 默认情况下spring-data-redis使用高性能的lettuce客户端实现,当然你可以替换为老旧的jedis。 缓存以及Redis相关的配置项分别为 默认情况下会有两个模板类被注入Spring IoC供我们使用,需要个性化配置来满足实际的开发。 一个是 另一个是 使用Spring Cache做缓存的时候,有针对不同的key设置不同过期时间的场景。比如Jwt Token我想设置为一周过期,而验证码我想设置为五分钟过期。这个怎么实现呢?需要我们个性化配置 这样就能很清楚地描述个性化的缓存了。 然后我们通过向Spring IoC分别注入 个性化的同时我们可以通过 验证Spring Cache Redis缓存个性化 请注意,只有通过Spring Cache操作缓存才会达到上图的效果。命令行操作需要显式的声明指令。 最近事情比较多,所以难得抽出时间来搞一搞。如果你在实际开发中遇到需要整合的功能也可以告诉我,同时如果你发现整合中的一些缺陷或者 Bug 请提交 ISSUE。多多关注:码农小胖哥,跟我一起整合开发脚手架。 从零搭建Spring Boot脚手架(6):整合Redis作为缓存 标签:led manager group 一起 java java 8 artifact 场景 nal 原文地址:https://blog.51cto.com/14901317/2522389
2. 整合目标
3. 依赖集成
4. 缓存及 Redis 配置
spring.cache
和spring.redis
开头的配置,这里比较简单的配置为:spring:
redis:
host: localhost
port: 6379
cache:
# type: REDIS
redis:
# 全局过期时间
time-to-live: 120
5. RedisTemplate 个性化
RedisTemplate<Object, Object>
,主要用于对象缓存,其默认使用JDK序列化,我们需要更改其序列化方式解决一些问题,比如Java 8日期问题、JSON序列化问题。需要我们重写一下。/**
* Redis的一些自定义配置.
*
* @author felord.cn
* @since 2020 /8/17 20:39
*/
@ConditionalOnClass(ObjectMapper.class)
@Configuration(proxyBeanMethods = false)
public class RedisConfiguration {
/**
* Redis template redis template.
*
* @param redisConnectionFactory the redis connection factory
* @return the redis template
*/
@Bean("redisTemplate")
public RedisTemplate
StringRedisTemplate
,主要处理键值都是字符串的缓存,采用默认就好。6. 缓存个性化
RedisCacheManager
。首先我通过枚举来定义这些缓存及其TTL时间。例如:/**
* 缓存定义枚举
*
* @author felord.cn
* @see cn.felord.kono.configuration.CacheConfiguration
* @since 2020/8/17 21:40
*/
public enum CacheEnum {
/**
* 用户jwt token 缓存空间 ttl 7天
*/
JWT_TOKEN_CACHE("usrTkn", 7 * 24 * 60 * 60),
/**
* 验证码缓存 5分钟ttl
*/
SMS_CAPTCHA_CACHE("smsCode", 5 * 60);
/**
* 缓存名称
*/
private final String cacheName;
/**
* 缓存过期秒数
*/
private final int ttlSecond;
CacheEnum(String cacheName, int ttlSecond) {
this.cacheName = cacheName;
this.ttlSecond = ttlSecond;
}
public String cacheName() {
return this.cacheName;
}
public int ttlSecond() {
return this.ttlSecond;
}
}
RedisCacheConfiguration
和RedisCacheManagerBuilderCustomizer
来个性化配置,你可以留意CacheEnum
是如何工作的。如果你有其它的个性化需要也可以对这两个配置类进行定制化。import cn.felord.kono.enumeration.CacheEnum;
import org.springframework.boot.autoconfigure.cache.CacheProperties;
import org.springframework.boot.autoconfigure.cache.RedisCacheManagerBuilderCustomizer;
import org.springframework.cache.annotation.EnableCaching;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.cache.RedisCacheConfiguration;
import org.springframework.data.redis.cache.RedisCacheManager;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.RedisSerializationContext;
import java.time.Duration;
import java.util.EnumSet;
import java.util.stream.Collectors;
/**
* redis 缓存配置.
*
* @author felord.cn
* @since 2020 /8/17 20:14
*/
@EnableCaching
@Configuration
public class CacheConfiguration {
/**
* Redis cache configuration.
*
* @param redisTemplate the redis template
* @return the redis cache configuration
*/
@Bean
public RedisCacheConfiguration redisCacheConfiguration(RedisTemplate
@EnableCaching
开启Spring Cache缓存支持。关于Spring Cache的细节可以通过文章Spring Cache 详解来了解。
7. 总结
上一篇:给学妹的 Java 学习路线
文章标题:从零搭建Spring Boot脚手架(6):整合Redis作为缓存
文章链接:http://soscw.com/index.php/essay/70868.html