@EnableCaching
@Configuration
public class RedisConfig {
@Bean
public CacheManager cacheManager(RedisConnectionFactory redisConnectionFactory) {
return new RedisCacheManager(
RedisCacheWriter.nonLockingRedisCacheWriter(redisConnectionFactory),
this.getRedisCacheConfigurationWithTtl(600),
this.getRedisCacheConfigurationMap()
);
}
private Map<String, RedisCacheConfiguration> getRedisCacheConfigurationMap() {
Map<String, RedisCacheConfiguration> redisCacheConfigurationMap = new HashMap<>();
redisCacheConfigurationMap.put("wxcl", this.getRedisCacheConfigurationWithTtl(60*60*24*7));
return redisCacheConfigurationMap;
}
private RedisCacheConfiguration getRedisCacheConfigurationWithTtl(Integer seconds) {
StringRedisSerializer keyStringRedisSerializer = new StringRedisSerializer();
Jackson2JsonRedisSerializer<Object> jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer<>(Object.class);
ObjectMapper om = new ObjectMapper();
om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
jackson2JsonRedisSerializer.setObjectMapper(om);
RedisCacheConfiguration redisCacheConfiguration = RedisCacheConfiguration.defaultCacheConfig();
redisCacheConfiguration = redisCacheConfiguration.serializeValuesWith(
RedisSerializationContext
.SerializationPair
.fromSerializer(jackson2JsonRedisSerializer)
).entryTtl(Duration.ofSeconds(seconds));
redisCacheConfiguration.serializeKeysWith(
RedisSerializationContext
.SerializationPair
.fromSerializer(keyStringRedisSerializer)
);
return redisCacheConfiguration;
}
}
@Slf4j
@Service("myUserCacheService")
public class MyUserCacheService {
@Cacheable(
value = "iotgw",
key = "'user'+#token",
unless = "#result eq null")
public Map<String, String> getUserFromRedis(String token, Map<String, String> user) {
log.info("从缓存中获取sso登录人信息失败 {},准备写入缓存", user);
return user;
}
@Cacheable(
value = "devicecenter",
key = "'company'+#token",
unless = "#result eq null")
public Map<String, String> getCompanyFromRedis(String token, Map<String, String> company) {
log.info("从缓存中获取登录人信息失败 {},准备写入缓存", company);
return company;
}
@CachePut(
value = "devicecenter",
key = "'company'+#token",
unless = "#result eq null")
public Map<String, String> setCompanyFromRedis(String token, Map<String, String> company) {
log.info("从缓存中获取登录人信息失败 {},准备写入缓存", company);
return company;
}
@Cacheable(
value = "iotmgw",
key = "'user'+#userId",
unless = "#result eq null")
public Map<String, String> getManagerUserFromRedis(String userId, Map<String, String> user) {
log.info("从缓存中获取后台登录人信息失败 {},准备写入缓存", user);
return user;
}
}