SpringBoot+Redisカスタムテンプレート
3520 ワード
Redisシーケンス化オブジェクトGenericToStringSerializer:任意のオブジェクトを文字列に一般化してシーケンス化できます.JacksonJsonRedisSerializer:シーケンス化objectオブジェクトはjson文字列です.Jackson 2 JsonRedisSerializer:JacksonJsonRedisSerializerと実は同じです.JdkSerializationRedisSerializer:javaオブジェクトをシーケンス化し、オブジェクトはSerializableインタフェースを実装する必要があります.StringRedisSerializer:単純な文字列シーケンス化.
Redis構成:
テンプレートの使用
Springキャッシュ注記*@Cacheableの使用
Redis構成:
@Configuration
@EnableCaching
public class RedisConfigurer extends CachingConfigurerSupport {
/* key bean
+ + +
*/
@Bean
public KeyGenerator wiselyKeyGenerator(){
return new KeyGenerator() {
@Override
public Object generate(Object target, Method method, Object... params) {
StringBuilder sb = new StringBuilder();
sb.append(target.getClass().getName());
sb.append(method.getName());
for (Object obj : params) {
sb.append(obj.toString());
}
return sb.toString();
}
};
}
@Bean
public CacheManager cacheManager(@SuppressWarnings("rawtypes") RedisTemplate, ?> redisTemplate) {
//
RedisCacheManager cacheManager = new RedisCacheManager(redisTemplate);
cacheManager.setDefaultExpiration(3600 * 24);
cacheManager.setUsePrefix(true);
cacheManager.setCachePrefix(new DefaultRedisCachePrefix(":"));
return cacheManager;
}
@Bean
public RedisTemplate redisTemplate(JedisConnectionFactory factory) {
Jackson2JsonRedisSerializer 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);
RedisTemplate template = new RedisTemplate();
template.setConnectionFactory(factory);
template.setKeySerializer(new StringRedisSerializer());
template.setValueSerializer(jackson2JsonRedisSerializer);
template.setHashKeySerializer(jackson2JsonRedisSerializer);
template.setHashValueSerializer(new StringRedisSerializer());
template.afterPropertiesSet();
return template;
}
@Bean
public RedisTemplate sessionRedisTemplate(JedisConnectionFactory factory) {
RedisTemplate template = new RedisTemplate();
template.setConnectionFactory(factory);
template.setDefaultSerializer(new GenericJackson2JsonRedisSerializer());
template.setKeySerializer(new StringRedisSerializer());
template.setValueSerializer(new JdkSerializationRedisSerializer());
template.afterPropertiesSet();
return template;
}
}
テンプレートの使用
@Resource
private StringRedisTemplate stringRedisTemplate;
......
@Resource(name = "redisTemplate")
private HashOperations hashOperations;
......
@Resource(name = "sessionRedisTemplate")
private ValueOperations valueOperations;
Springキャッシュ注記*@Cacheableの使用
@Cacheable(value = "domainHome", keyGenerator = "wiselyKeyGenerator", unless = "#result.empty")
public List getDomains(String serverName) {
......
}