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タイプです。
Redis Serializerプログレッシブインターフェース
Redis SerializerインターフェースはRedisプログレッシブインターフェースであり、Redis KEYとVALEのプログレッシブ化に用いられる。
Redis Serializerインターフェースの実装クラスは以下の通りです。
まとめてみます JDKプログレッシブ方式(デフォルト) Stringプログレッシブ方式J SONプログレッシブ方式 XMLプログレッシブ方式 JDKプログレッシブ方式(デフォルト)
私達はソースコードの
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プログレッシブ方式
ほとんどの場合、KEYとVALEはこのような順序案を使います。
JSONプログレッシブ方式
一つのオブジェクトを一つの文字列に並べて、どのように文字列がオブジェクトのタイプに逆順序になるかを考えてみましょう。JacksonはDefault Typengを通じて、文字列の中で冗長なタイプが多いです。このように逆順序化すれば、具体的なタイプが分かります。
まず結論を言います
標準JSON
テストします
【配置クラス】
多くなりましたか?@class属性ではありませんか?逆序列化の対象のタイプはここから入手できます。
@class属性は、完全にアンチプログレッシブ後のオブジェクトタイプを解決したように見えますが、JSON文字列の占有が大きくなりましたので、実際のプロジェクトでは、Jackson 2 JsonRedis Serializerを採用することはめったにありません。
XMLプログレッシブ方式
ここで、Redis Template及び4つのプロローグ方式を深く理解する文章について紹介します。これに関連して、Redis Templateのプログレッシブ内容をもっと多く紹介します。私達の以前の文章を検索したり、下記の関連記事を引き続きご覧ください。これからもよろしくお願いします。
Springを使って提供されたSpring Data Redis操作redisは必ずSpringから提供されたテンプレート類RedisTemplateを使用して、今日はこのテンプレート類をよく見てみます。
Redis Template
4つのプログレッシブ関連の属性を見てみてください。主にKEYとVALEのプログレッシブに使われます。例えば、私たちはよくPOJOオブジェクトをRedisに格納しますが、一般的にはJSON方式を使って逐次文字列化してRedisに格納します。
Springが提供するRedisデータ構造の操作クラス
よく使うSteringRedis Templateを見てください。
RedisTemplate
org.springframework.data.redis.core.StringRedisTemplate
は、RedisTemplateクラスを継承し、org.springframework.data.redis.serializer.StringRedisSerializer
文字列の順序付け方式を使用する。Redis Serializerプログレッシブインターフェース
Redis SerializerインターフェースはRedisプログレッシブインターフェースであり、Redis KEYとVALEのプログレッシブ化に用いられる。
Redis Serializerインターフェースの実装クラスは以下の通りです。
まとめてみます
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のプログレッシブ内容をもっと多く紹介します。私達の以前の文章を検索したり、下記の関連記事を引き続きご覧ください。これからもよろしくお願いします。