SpringBoot+Redisカスタムテンプレート

3520 ワード

Redisシーケンス化オブジェクトGenericToStringSerializer:任意のオブジェクトを文字列に一般化してシーケンス化できます.JacksonJsonRedisSerializer:シーケンス化objectオブジェクトはjson文字列です.Jackson 2 JsonRedisSerializer:JacksonJsonRedisSerializerと実は同じです.JdkSerializationRedisSerializer:javaオブジェクトをシーケンス化し、オブジェクトはSerializableインタフェースを実装する必要があります.StringRedisSerializer:単純な文字列シーケンス化.
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) {
    ......
}