zoukankan      html  css  js  c++  java
  • Redis自定义fastJson Serializer

    原文:https://www.cnblogs.com/yangzhilong/p/10876105.html

    public class FastJsonRedisSerializer<T> implements RedisSerializer<T> {
     
        public static final Charset DEFAULT_CHARSET = Charset.forName("UTF-8");
     
        private Class<T> clazz;
     
        public FastJsonRedisSerializer(Class<T> clazz) {
            super();
            this.clazz = clazz;
        }
     
        @Override
        public byte[] serialize(T t) throws SerializationException {
            if (t == null) {
                return new byte[0];
            }
            return JSON.toJSONString(t, SerializerFeature.WriteClassName).getBytes(DEFAULT_CHARSET);
        }
     
        @Override
        public T deserialize(byte[] bytes) throws SerializationException {
            if (bytes == null || bytes.length <= 0) {
                return null;
            }
            String str = new String(bytes, DEFAULT_CHARSET);
            return (T) JSON.parseObject(str, clazz);
        }
    }
    @Configuration
    public class RedisConfig {
     
        /**
         * 重写Redis序列化方式,使用Json方式:
         * 当我们的数据存储到Redis的时候,我们的键(key)和值(value)都是通过Spring提供的Serializer序列化到数据库的。RedisTemplate默认使用的是JdkSerializationRedisSerializer,StringRedisTemplate默认使用的是StringRedisSerializer。
         * Spring Data JPA为我们提供了下面的Serializer:
         * GenericToStringSerializer、Jackson2JsonRedisSerializer、JacksonJsonRedisSerializer、JdkSerializationRedisSerializer、OxmSerializer、StringRedisSerializer。
         * 在此我们将自己配置RedisTemplate并定义Serializer。
         *
         * @param redisConnectionFactory
         * @return
         */
        @Bean
        public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {
            RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
            redisTemplate.setConnectionFactory(redisConnectionFactory);
            
            FastJsonRedisSerializer<Object> fastJsonRedisSerializer = new FastJsonRedisSerializer<>(Object.class);
            // 全局开启AutoType,不建议使用
            // ParserConfig.getGlobalInstance().setAutoTypeSupport(true);
            // 建议使用这种方式,小范围指定白名单
            ParserConfig.getGlobalInstance().addAccept("com.longge.");
     
            // 设置值(value)的序列化采用FastJsonRedisSerializer。
            redisTemplate.setValueSerializer(fastJsonRedisSerializer);
            redisTemplate.setHashValueSerializer(fastJsonRedisSerializer);
            // 设置键(key)的序列化采用StringRedisSerializer。
            redisTemplate.setKeySerializer(new StringRedisSerializer());
            redisTemplate.setHashKeySerializer(new StringRedisSerializer());
     
            redisTemplate.afterPropertiesSet();
            return redisTemplate;
        }
    
    }
  • 相关阅读:
    hdu 3339 最短路+01背包
    hdu 3584 三维树状数组
    hdu 最短路径的特殊运用
    螺旋矩阵(NOIP2014 普及组第三题)
    子矩阵(NOIP2014 普及组第四题)
    金币(NOIP2015 普及组第一题)
    扫雷游戏(NOIP2015 普及组第二题)
    求和(NOIP2015 普及组第三题)
    推销员(NOIP2015 普及组第四题)
    魔法阵(NOIP2016 普及组第四题)
  • 原文地址:https://www.cnblogs.com/shihaiming/p/10998643.html
Copyright © 2011-2022 走看看