springboot2.X Redis接口缓存
程序员文章站
2022-07-07 11:26:32
...
- 不同接口使用不同配置。
注解中的value值与配置中 RedisCacheConfiguration的key对应。可以指定方法使用的配置。
@Cacheable(value = "my-redis-cache1")
上面 value 值对应配置中 configMap 的 key
configMap.put("my-redis-cache1", config);
- 配置
@Configuration
public class CacheRedisConfiguration {
@Bean
public CacheManager cacheManager(RedisConnectionFactory factory) {
// 生成一个默认配置,通过config对象即可对缓存进行自定义配置
RedisCacheConfiguration config = RedisCacheConfiguration.defaultCacheConfig();
// 设置缓存的默认过期时间,也是使用Duration设置
config = config.entryTtl(Duration.ofMinutes(1))
// 不缓存空值
.disableCachingNullValues();
// 设置一个初始化的缓存空间set集合
Set<String> cacheNames = new HashSet<>();
//"my-redis-cache1"对应 @Cacheable(value = "my-redis-cache1") 中的 value 值
cacheNames.add("my-redis-cache1");
cacheNames.add("my-redis-cache2");
// 对每个缓存空间应用不同的配置
Map<String, RedisCacheConfiguration> configMap = new HashMap<>();
configMap.put("my-redis-cache1", config);
configMap.put("my-redis-cache2", config.entryTtl(Duration.ofSeconds(120)));
// 使用自定义的缓存配置初始化一个cacheManager
RedisCacheManager cacheManager = RedisCacheManager.builder(factory)
// 注意这两句的调用顺序,一定要先调用该方法设置初始化的缓存名,再初始化相关的配置
.initialCacheNames(cacheNames)
.withInitialCacheConfigurations(configMap)
.build();
return cacheManager;
}
}
- 使用
@Cacheable(value = "my-redis-cache2",unless = "#result==null")
@PostMapping("/singleDictionary")
public Item userName(Integer code) {
System.out.println("123");
return itemService.getOne(code);
}
- @Cacheable 参数
参数 | 解释 |
---|---|
cacheNames | 缓存名称 |
value | 缓存名称的别名 |
condition | Spring SpEL 表达式,用来确定是否缓存 |
key | SpEL 表达式,用来动态计算key |
keyGenerator | Bean 名字,用来自定义key生成算法,跟key不能同时用 |
unless | SpEL 表达式,用来否决缓存,作用跟condition相反 |
sync | 多线程同时访问时候进行同步 |
- 条件化缓存
- unless
仅阻止将对象放进缓存,在这个方法被调用的时候,依然会去缓存中进行查找,如果找到了匹配的值,就会返回找到的值。 - condition
如果表达式计算结果为false,那么在这个方法调用的过程中,缓存是被禁用的。即在这个方法被调用的时候,不会去缓存进行查找,同时返回值也不会放进缓存中。
- 自定义缓存 key 生成策略
@Component
public class MyKeyGenerator implements KeyGenerator {
/**
* 生成 key 的方法
* @param target 调用缓存的对象
* @param method 调用缓存的方法
* @param params 方法的入参
* @return 生成的 key
*/
@Override
public Object generate(Object target, Method method, Object... params) {
}
}
推荐阅读
-
java redis缓存用法(java执行redis命令)
-
三分钟学会Redis在.NET Core中做缓存中间件
-
Redis缓存详解
-
redis之django-redis的简单缓存使用
-
缓存管理之MemoryCache与Redis的使用
-
Laravel 下配置 Redis 让缓存、Session 各自使用不同的 Redis 数据库
-
spring boot从redis取缓存发生java.lang.ClassCastException异常
-
Spring Boot 2整合Redis做缓存
-
springboot redis-cache 自动刷新缓存
-
redis服务器环境下mysql实现lnmp架构缓存