<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      RedisConfig:RedisTemplate序列化器和SpringCache配置

      前言

      介紹常用的四種RedisTemplate序列化器和SpringCache配置。

      GenericJackson2JsonRedisSerializer

      /**
       * GenericJackson2JsonRedisSerializer【Jackson】
       */
      @Configuration
      // 開啟SpringCache
      @EnableCaching
      public class RedisConfig {
      
          @Bean
          public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory connectionFactory) {
              RedisTemplate<Object, Object> template = new RedisTemplate<>();
              template.setConnectionFactory(connectionFactory);
      
              // 使用GenericJackson2JsonRedisSerializer進行序列化和反序列化
              GenericJackson2JsonRedisSerializer serializer = new GenericJackson2JsonRedisSerializer();
      
              template.setKeySerializer(new StringRedisSerializer());
              template.setValueSerializer(serializer);
              template.setHashKeySerializer(new StringRedisSerializer());
              template.setHashValueSerializer(serializer);
              template.afterPropertiesSet();
              return template;
          }
      
          /**
           * 支持SpringCache
           *
           * @param cacheProperties
           * @return
           */
          @Bean
          public RedisCacheConfiguration redisCacheConfiguration(CacheProperties cacheProperties) {
              RedisCacheConfiguration config = RedisCacheConfiguration.defaultCacheConfig();
              config = config.serializeKeysWith(RedisSerializationContext.SerializationPair.fromSerializer(new StringRedisSerializer()));
              config = config.serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(new GenericJackson2JsonRedisSerializer()));
              CacheProperties.Redis redisProperties = cacheProperties.getRedis();
      
              if (redisProperties.getTimeToLive() != null) {
                  config = config.entryTtl(redisProperties.getTimeToLive());
              }
              if (redisProperties.getKeyPrefix() != null) {
                  config = config.computePrefixWith((cacheName) -> redisProperties.getKeyPrefix());
              }
              if (!redisProperties.isCacheNullValues()) {
                  config = config.disableCachingNullValues();
              }
              if (!redisProperties.isUseKeyPrefix()) {
                  config = config.disableKeyPrefix();
              }
              return config;
          }
      }
      

      Jackson2JsonRedisSerializer

      /**
       * Jackson2JsonRedisSerializer【Jackson】
       */
      @Configuration
      // 開啟SpringCache
      @EnableCaching
      public class RedisConfig {
      
          @Bean
          @SuppressWarnings({"unchecked", "all"})
          public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory connectionFactory) {
              RedisTemplate<Object, Object> template = new RedisTemplate<>();
              template.setConnectionFactory(connectionFactory);
      
              // 默認使用JDK的序列化方式
              // 使用Jackson2JsonRedisSerializer進行序列化和反序列化
              Jackson2JsonRedisSerializer serializer = new Jackson2JsonRedisSerializer(Object.class);
              ObjectMapper objectMapper = new ObjectMapper();
              // 指定要序列化的域,field的get、set以及修飾符范圍
              // ANY表示包括private和public
              objectMapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
              // 生成 @class 屬性
              objectMapper.activateDefaultTyping(objectMapper.getPolymorphicTypeValidator(), ObjectMapper.DefaultTyping.NON_FINAL, JsonTypeInfo.As.PROPERTY);
              // 指定序列化輸入的類型,類必須是非final修飾的
              objectMapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
              serializer.setObjectMapper(objectMapper);
      
              template.setKeySerializer(new StringRedisSerializer()); template.setValueSerializer(serializer);
              template.setHashKeySerializer(new StringRedisSerializer()); template.setHashValueSerializer(serializer);
              template.afterPropertiesSet(); return template;
          }
      
          /**
           * 支持SpringCache
           *
           * @param cacheProperties
           * @return
           */
          @Bean
          @SuppressWarnings({"unchecked", "all"})
          public RedisCacheConfiguration redisCacheConfiguration(CacheProperties cacheProperties) {
              RedisCacheConfiguration config = RedisCacheConfiguration.defaultCacheConfig();
              config = config.serializeKeysWith(RedisSerializationContext.SerializationPair.fromSerializer(new StringRedisSerializer()));
      
              // 使用Jackson2JsonRedisSerializer進行序列化和反序列化
              Jackson2JsonRedisSerializer serializer = new Jackson2JsonRedisSerializer(Object.class);
              ObjectMapper objectMapper = new ObjectMapper();
              // 指定要序列化的域,field的get、set以及修飾符范圍
              // ANY表示包括private和public
              objectMapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
              // 生成@class屬性
              objectMapper.activateDefaultTyping(objectMapper.getPolymorphicTypeValidator(), ObjectMapper.DefaultTyping.NON_FINAL, JsonTypeInfo.As.PROPERTY);
              // 指定序列化輸入的類型,類必須是非final修飾的
              objectMapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
              serializer.setObjectMapper(objectMapper);
      
              config = config.serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(serializer));
              CacheProperties.Redis redisProperties = cacheProperties.getRedis();
      
              if (redisProperties.getTimeToLive() != null) {
                  config = config.entryTtl(redisProperties.getTimeToLive());
              } if (redisProperties.getKeyPrefix() != null) {
                  config = config.computePrefixWith((cacheName) -> redisProperties.getKeyPrefix());
              } if (!redisProperties.isCacheNullValues()) {
                  config = config.disableCachingNullValues();
              } if (!redisProperties.isUseKeyPrefix()) {
                  config = config.disableKeyPrefix();
              } return config;
          }
      }
      

      FastJson2JsonRedisSerializer

      /**
       * Redis使用FastJson序列化
       *
       * @author zq
       */
      public class FastJson2JsonRedisSerializer<T> implements RedisSerializer<T> {
      
          public static final Charset DEFAULT_CHARSET = StandardCharsets.UTF_8;
      
          static {
              ParserConfig.getGlobalInstance().setAutoTypeSupport(true);
          }
      
          private final Class<T> clazz;
          @SuppressWarnings("unused")
          private ObjectMapper objectMapper = new ObjectMapper();
      
          public FastJson2JsonRedisSerializer(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 JSON.parseObject(str, clazz);
          }
      
          public void setObjectMapper(ObjectMapper objectMapper) {
              Assert.notNull(objectMapper, "'objectMapper' must not be null");
              this.objectMapper = objectMapper;
          }
      
          protected JavaType getJavaType(Class<?> clazz) {
              return TypeFactory.defaultInstance().constructType(clazz);
          }
      }
      
      /**
       * FastJson2JsonRedisSerializer【fastjson】
       */
      @Configuration
      // 開啟SpringCache
      @EnableCaching
      public class RedisConfig {
      
          @Bean
          @SuppressWarnings({"unchecked", "all"})
          public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory connectionFactory) {
              RedisTemplate<Object, Object> template = new RedisTemplate<>();
              template.setConnectionFactory(connectionFactory);
      
              // 使用FastJson2JsonRedisSerializer【實現RedisSerializer】進行序列化和反序列化
              FastJson2JsonRedisSerializer serializer = new FastJson2JsonRedisSerializer(Object.class);
              ObjectMapper mapper = new ObjectMapper();
              mapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
              mapper.activateDefaultTyping(LaissezFaireSubTypeValidator.instance, ObjectMapper.DefaultTyping.NON_FINAL, JsonTypeInfo.As.PROPERTY);
              mapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
              serializer.setObjectMapper(mapper);
      
              template.setKeySerializer(new StringRedisSerializer());
              template.setValueSerializer(serializer);
              template.setHashKeySerializer(new StringRedisSerializer());
              template.setHashValueSerializer(serializer);
      
              template.afterPropertiesSet();
              return template;
          }
      
          /**
           * 支持SpringCache
           *
           * @param cacheProperties
           * @return
           */
          @Bean
          @SuppressWarnings({"unchecked", "all"})
          public RedisCacheConfiguration redisCacheConfiguration(CacheProperties cacheProperties) {
              RedisCacheConfiguration config = RedisCacheConfiguration.defaultCacheConfig();
              config = config.serializeKeysWith(RedisSerializationContext.SerializationPair.fromSerializer(new StringRedisSerializer()));
      
              // 使用FastJson2JsonRedisSerializer【實現RedisSerializer】進行序列化和反序列化
              FastJson2JsonRedisSerializer serializer = new FastJson2JsonRedisSerializer(Object.class);
              ObjectMapper mapper = new ObjectMapper();
              mapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
              mapper.activateDefaultTyping(LaissezFaireSubTypeValidator.instance, ObjectMapper.DefaultTyping.NON_FINAL, JsonTypeInfo.As.PROPERTY);
              mapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
              serializer.setObjectMapper(mapper);
      
              config = config.serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(serializer));
              CacheProperties.Redis redisProperties = cacheProperties.getRedis();
      
              if (redisProperties.getTimeToLive() != null) {
                  config = config.entryTtl(redisProperties.getTimeToLive());
              }
              if (redisProperties.getKeyPrefix() != null) {
                  config = config.computePrefixWith((cacheName) -> redisProperties.getKeyPrefix());
              }
              if (!redisProperties.isCacheNullValues()) {
                  config = config.disableCachingNullValues();
              }
              if (!redisProperties.isUseKeyPrefix()) {
                  config = config.disableKeyPrefix();
              }
              return config;
          }
      }
      

      FastJson22JsonRedisSerializer

      /**
       * Redis使用FastJson2序列化
       *
       * @author zq
       */
      public class FastJson22JsonRedisSerializer<T> implements RedisSerializer<T> {
      
          public static final Charset DEFAULT_CHARSET = StandardCharsets.UTF_8;
      
          // 為了兼容性保留
          private Object objectMapper = new Object();
      
          private Class<T> clazz;
      
          public FastJson22JsonRedisSerializer(Class<T> clazz) {
              super();
              this.clazz = clazz;
          }
      
          @Override
          public byte[] serialize(T t) throws SerializationException {
              if (t == null) {
                  return new byte[0];
              }
              try {
                  return JSON.toJSONString(t, JSONWriter.Feature.WriteClassName).getBytes(DEFAULT_CHARSET);
              } catch (Exception ex) {
                  throw new SerializationException("Could not serialize: " + ex.getMessage(), ex);
              }
          }
      
          @Override
          public T deserialize(byte[] bytes) throws SerializationException {
              if (bytes == null || bytes.length == 0) {
                  return null;
              }
              try {
                  String str = new String(bytes, DEFAULT_CHARSET);
                  return JSON.parseObject(str, clazz, JSONReader.Feature.SupportAutoType);
              } catch (Exception ex) {
                  throw new SerializationException("Could not deserialize: " + ex.getMessage(), ex);
              }
          }
      
          protected java.lang.reflect.Type getJavaType(Class<?> clazz) {
              return clazz;
          }
      
          public Object getObjectMapper() {
              return objectMapper;
          }
      
          public void setObjectMapper(Object objectMapper) {
              Assert.notNull(objectMapper, "'objectMapper' must not be null");
              this.objectMapper = objectMapper;
          }
      
          public Class<T> getClazz() {
              return clazz;
          }
      
          public void setClazz(Class<T> clazz) {
              this.clazz = clazz;
          }
      }
      
      /**
       * redis配置
       *
       * @author zq
       */
      
      /**
       * FastJson22JsonRedisSerializer【fastjson2】
       */
      @Configuration
      // 開啟SpringCache
      @EnableCaching
      public class RedisConfig {
      
          @Bean
          @SuppressWarnings({"unchecked", "all"})
          public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory connectionFactory) {
              RedisTemplate<Object, Object> template = new RedisTemplate<>();
              template.setConnectionFactory(connectionFactory);
      
              // 使用FastJson22JsonRedisSerializer【實現RedisSerializer】進行序列化和反序列化
              FastJson22JsonRedisSerializer serializer = new FastJson22JsonRedisSerializer(Object.class);
              ObjectMapper mapper = new ObjectMapper();
              mapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
              mapper.activateDefaultTyping(LaissezFaireSubTypeValidator.instance, ObjectMapper.DefaultTyping.NON_FINAL, JsonTypeInfo.As.PROPERTY);
              mapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
              serializer.setObjectMapper(mapper);
      
              template.setKeySerializer(new StringRedisSerializer());
              template.setValueSerializer(serializer);
              template.setHashKeySerializer(new StringRedisSerializer());
              template.setHashValueSerializer(serializer);
      
              template.afterPropertiesSet();
              return template;
          }
      
          /**
           * 支持SpringCache
           *
           * @param cacheProperties
           * @return
           */
          @Bean
          @SuppressWarnings({"unchecked", "all"})
          public RedisCacheConfiguration redisCacheConfiguration(CacheProperties cacheProperties) {
              RedisCacheConfiguration config = RedisCacheConfiguration.defaultCacheConfig();
              config = config.serializeKeysWith(RedisSerializationContext.SerializationPair.fromSerializer(new StringRedisSerializer()));
      
              // 使用FastJson22JsonRedisSerializer【實現RedisSerializer】進行序列化和反序列化
              FastJson22JsonRedisSerializer serializer = new FastJson22JsonRedisSerializer(Object.class);
              ObjectMapper mapper = new ObjectMapper();
              mapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
              mapper.activateDefaultTyping(LaissezFaireSubTypeValidator.instance, ObjectMapper.DefaultTyping.NON_FINAL, JsonTypeInfo.As.PROPERTY);
              mapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
              serializer.setObjectMapper(mapper);
      
              config = config.serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(serializer));
              CacheProperties.Redis redisProperties = cacheProperties.getRedis();
      
              if (redisProperties.getTimeToLive() != null) {
                  config = config.entryTtl(redisProperties.getTimeToLive());
              } if (redisProperties.getKeyPrefix() != null) {
                  config = config.computePrefixWith((cacheName) -> redisProperties.getKeyPrefix());
              } if (!redisProperties.isCacheNullValues()) {
                  config = config.disableCachingNullValues();
              } if (!redisProperties.isUseKeyPrefix()) {
                  config = config.disableKeyPrefix();
              } return config;
          }
      }
      

      測試結果

      image

      posted @ 2025-08-27 08:48  南翔技校畢業后  閱讀(13)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 国产精品乱码久久久久久小说| 国产精品午夜福利免费看| 一二三四中文字幕日韩乱码| 精品999日本久久久影院| 香蕉影院在线观看| 九九热在线免费视频精品| 久久中文字幕一区二区| 高清无码午夜福利视频| 日韩精品 在线 国产 丝袜| 国产目拍亚洲精品区一区| 久久久亚洲欧洲日产国码606| 久久亚洲精品无码播放| 国产精品成人无码久久久| 韩国无码AV片午夜福利| 精品久久久久中文字幕日本| 国产成人精品久久一区二区| 中文字幕在线精品国产| 亚洲一区二区三区av无码| 99亚洲男女激情在线观看| 国产片av在线观看国语| 又爽又黄又无遮挡的视频| 明溪县| 成人午夜在线观看刺激| 日本高清一区免费中文视频| 国产熟妇久久777777| 国产精品一区二区三区黄色| 久久五月丁香激情综合| 久热这里只有精品12| 欧美日本激情| 亚洲AV天天做在线观看| 国产亚洲精品AA片在线播放天| 欧美高清一区三区在线专区| 亚洲男女羞羞无遮挡久久丫 | 亚洲国产中文字幕在线视频综合| 亚洲av无码专区在线亚| 亚洲精品一区二区三天美| 成人国产精品中文字幕| 久久精品国产亚洲av高| 视频一区二区三区四区不卡| 91精品国产免费人成网站| 91久久国产成人免费观看|