Redis Template及び4つのプログレッシブ方式を深く理解する


概要
Springを使って提供されたSpring Data Redis操作redisは必ずSpringから提供されたテンプレート類RedisTemplateを使用して、今日はこのテンプレート類をよく見てみます。
Redis Template
在这里插入图片描述
4つのプログレッシブ関連の属性を見てみてください。主にKEYとVALEのプログレッシブに使われます。例えば、私たちはよくPOJOオブジェクトをRedisに格納しますが、一般的にはJSON方式を使って逐次文字列化してRedisに格納します。
Springが提供するRedisデータ構造の操作クラス
  • Value Operationsクラスは、Redis String API動作
  • を提供する。
  • ListOperationsクラスは、Redis List API動作
  • を提供する。
  • SetOperationsクラスは、Redis Set API動作
  • を提供する。
  • ZSetOperationsクラスは、Redis ZSet(Sorted Set)API動作
  • を提供する。
  • GeoOperationsクラスは、Redis Geo API動作
  • を提供する。
  • HyperLogOperations類は、Redis Hyper Log APIの操作を提供します。
  • StringRedis Template
    よく使うSteringRedis Templateを見てください。
    RedisTemplateは汎型をサポートしており、StringRedisTemplate K VはStringタイプです。org.springframework.data.redis.core.StringRedisTemplateは、RedisTemplateクラスを継承し、org.springframework.data.redis.serializer.StringRedisSerializer文字列の順序付け方式を使用する。
    在这里插入图片描述
    Redis Serializerプログレッシブインターフェース
    Redis SerializerインターフェースはRedisプログレッシブインターフェースであり、Redis KEYとVALEのプログレッシブ化に用いられる。
    在这里插入图片描述
    Redis Serializerインターフェースの実装クラスは以下の通りです。
    在这里插入图片描述
    まとめてみます
  • JDKプログレッシブ方式(デフォルト)
  • Stringプログレッシブ方式J
  • SONプログレッシブ方式
  • XMLプログレッシブ方式
  • JDKプログレッシブ方式(デフォルト)org.springframework.data.redis.serializer.JdkSerializationRedisSerializer、デフォルトの場合、RedisTemplateは、このデータ列化方式を使用する。
    私達はソースコードのRedisTemplate#afterPropertiesSet()を見にきました。
    在这里插入图片描述 
    Spring Boot自動化されたRedisTemplate Beanオブジェクトを配置した場合、デフォルトのプログレッシブ方式は設定されていません。
    圧倒的に多くの場合、JdkSerializarを使って逐次化することは推奨されません。主に人工的にデータを調べるのが不便です。
    私たちはテストをします。
    在这里插入图片描述
    実行ユニットテスト
    在这里插入图片描述
    在这里插入图片描述
    分かりません。お兄さん。
    KEYの前には変な16進数文字があります。VALEも奇妙な16進数文字です。。。。。
    なぜこのような奇妙な16進制ですか?Object Output Stream(›writeString str,bolean unshared)は、実際には、フラグビット+文字列長+文字列内容です。
    KEYはこのように序列化されています。オンラインでKEYを通じて対応するVALEを調べに行くのは非常に不便です。だからKEYはこのように序次化されないはずです。
    VALEはこのようにプロローグされています。読むのは難しいかもしれません。他の言語をサポートしないです。実際にはまだOKです。しかし、実際のオンラインシーンは、やはりJSONを使ったプロローグが多いです。
    Stringプログレッシブ方式org.springframework.data.redis.serializer.StringRedisSerializer、文字列とバイナリ配列の直接変換
    在这里插入图片描述
    ほとんどの場合、KEYとVALEはこのような順序案を使います。
    JSONプログレッシブ方式org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializerは、Jacksonを使用してJSONのプログレッシブ方式を実現し、Generac単語からすべてのクラスをサポートしていることが分かる。
    
    public GenericJackson2JsonRedisSerializer(@Nullable String classPropertyTypeName) {
    
    			.....
    			..... 
    		if (StringUtils.hasText(classPropertyTypeName)) {
    			mapper.enableDefaultTypingAsProperty(DefaultTyping.NON_FINAL, classPropertyTypeName);
    		} else {
    			mapper.enableDefaultTyping(DefaultTyping.NON_FINAL, As.PROPERTY);
    		}
    	}
    クラスPropertyType Nameが空でない場合は、着信先のクラスtyType Name属性に対応する値をデフォルトタイプ(Default Typeng)として使用します。
    一つのオブジェクトを一つの文字列に並べて、どのように文字列がオブジェクトのタイプに逆順序になるかを考えてみましょう。JacksonはDefault Typengを通じて、文字列の中で冗長なタイプが多いです。このように逆順序化すれば、具体的なタイプが分かります。
    在这里插入图片描述
    まず結論を言います
    標準JSON
    
    {
     "id": 100,
     "name": "   ",
     "sex": "Male"
    }
    Jackson Default Typengを使ったプログレッシブ化
    
    {
     "@class": "com.artisan.domain.Artisan",
     "id": 100,
     "name": "   ",
     "sex": "Male"
    }

    テストします
    【配置クラス】
    
     @Bean
     public RedisTemplate<String, Object> redisTemplate() {
      //    RedisTemplate   
      RedisTemplate<String, Object> template = new RedisTemplate<>();
    
      //    RedisConnection   。         Java Redis           
      template.setConnectionFactory(connectionFactory);
    
      //    String      ,    KEY 。
      template.setKeySerializer(RedisSerializer.string());
    
      //    JSON      (   Jackson ),    VALUE 。
      template.setValueSerializer(RedisSerializer.json());
    
      return template;
     }
    
    【ユニットテスト】
    
     @Test
     public void testJacksonSerializer() {
      Artisan artisan = new Artisan();
      artisan.setName("   ");
      artisan.setId(100);
      artisan.setSex("Male");
      // set
      redisTemplate.opsForValue().set("artisan", artisan);
     }
    
    【結果】
    在这里插入图片描述
    多くなりましたか?@class属性ではありませんか?逆序列化の対象のタイプはここから入手できます。
    @class属性は、完全にアンチプログレッシブ後のオブジェクトタイプを解決したように見えますが、JSON文字列の占有が大きくなりましたので、実際のプロジェクトでは、Jackson 2 JsonRedis Serializerを採用することはめったにありません。
    XMLプログレッシブ方式org.springframework.data.redis.serializer.OxmSerializerは、Spring OXMを使用して、Stringおよびバイナリ配列の変換を行う。どのプロジェクトを見たことがないので、もううるさくないです。
    ここで、Redis Template及び4つのプロローグ方式を深く理解する文章について紹介します。これに関連して、Redis Templateのプログレッシブ内容をもっと多く紹介します。私達の以前の文章を検索したり、下記の関連記事を引き続きご覧ください。これからもよろしくお願いします。