Spring Redisの使用を深く理解する(三)、RedisTemplateの操作クラスを使用してRedisにアクセスする
5626 ワード
前の記事では、RedisTemplateの注釈トランザクションのサポートと、提供されるシーケンス化器について説明しました.
トランザクションはenableTransactionSupportをオンにし、@transactional注釈を使用します.コールバックのconnectionを直接通過すると、multiとexecのトランザクションのコミットを自分で行う必要はありません.しかしコールバックでconnectionを取得すると,テンプレートクラスの機能は全く達成されなかった.そこで今回は、いくつかのOperationsインタフェースが提供する方法についてお話しします.
1. RedisOperationsインタフェースの説明
このインタフェースの実装クラスはRedisTemplate自体であり,主にRedisキー,トランザクション,実行スクリプトなどのコマンドのサポートを提供し,データの読み書きを担当しない.
コードを選択してみましょう.
これはトランザクションの監視命令であり,中の実装もコールバックRedisCallbackを用いていることがわかる.これらのapiはconnectionのapiでカプセル化されている.
2.ValueOperationsインタフェースの説明
このインタフェースの実装クラスはDefaultValueOperationsであり、defaultというクラスは同時にAbstractOperationを継承し、このクラスの構造関数を見てみましょう.
非公開ではtemplateに転送して構築する必要がある.しかし、私たちはアクセスできません.しかし、焦らないでください.RedisTemplateでは、opsForValue()という工場方法が提供されています.このメソッドは、デフォルトの操作クラスを返します.また,注入は注記@Resource(name=「redisTemplate」)によって直接行うことができる.
不思議なことに、親子の兄弟関係のない2つのクラスが、どうしてお互いに注入できるのだろうか.これはSpringのEditorメカニズムで、ValueOperationsEditorというクラスを検索するとわかりますが、Springは注入時にEditorのsetValueメソッドを呼び出します.Springソースを知っているはずです.私も他人の文章を読んで理解したのです.記事のアドレス
実はtemplateでValueOperationsを注入できるほか、上のいくつかのoperationsやHashOperationsを注入することもできます.
DefaultValueOperationsは、すべてのRedis文字列タイプの操作apiを提供します.例えばset、get、incrなどです.これらの方法を使用すると、保存したものを自分でシーケンス化したり、逆シーケンス化したりする必要がなく、任意のjavaタイプを簡単に直接保存することができます.
注意:汎用タイプ、およびシーケンス化器はRedisTemplateから来ています.独自にjsonまたは他のシーケンス化を行う場合は、RedisTemplateで変更する必要があります.
また,メンバーlistOps,setOps,zSetOpsという次の操作クラスについては,言うまでもなく,原理はValue Operationsと同様に,他のいくつかのデータ型の実装である.
3.HashOperationsインタフェースの説明
このインタフェースはメンバー変数を定義していないが,Hashにとって追加のKeyとValueが追加され,汎用型はメンバーの前で追加定義できないため,直接方法が提供されたと推測される.しかし、幸いにもJdkSerializerが使われているので、この定義はどんなタイプの汎用型でも運転異常は発生しません.
これは基本的なputメソッドであり,keyとhashkeyの2つが示され,異なるシーケンス化メソッドが呼び出される.メソッドを見てみると、シーケンス化hashkeyはtemplateのhashkeyserializerを使用しており、デフォルトはjdkserializerであり、これはredisコンソールに何が保存されているのか分からないことになります.気に入らない場合は、redistemplate.sethashkeyserializer()で設定できます.
hash構造のすべてのapiについても,hsetがputになり,hgetがgetになるなど,このクラスでカプセル化されている.自分でapiを見る必要があります.誤解されてはいけない.
4.まとめ
ここまで、基本的な使用はもう終わりました.ざらざらしていて、私が誤解しやすい点を重点的に説明しただけで、基礎的な操作は皆さん自身で少し見る必要があります.レンガを投げて玉を引く役割を果たしましょう.次に、この2ヶ月でRedisで遭遇したいくつかの問題をまとめて説明するかもしれません.
gitにコードを置きましたアドレスはhttps://github.com/55375829/learnああ、中のspjedisは当時自分が勉強していたときに建てたプロジェクトです.
トランザクションはenableTransactionSupportをオンにし、@transactional注釈を使用します.コールバックのconnectionを直接通過すると、multiとexecのトランザクションのコミットを自分で行う必要はありません.しかしコールバックでconnectionを取得すると,テンプレートクラスの機能は全く達成されなかった.そこで今回は、いくつかのOperationsインタフェースが提供する方法についてお話しします.
private ValueOperations<K, V> valueOps;
private ListOperations<K, V> listOps;
private SetOperations<K, V> setOps;
private ZSetOperations<K, V> zSetOps;
1. RedisOperationsインタフェースの説明
このインタフェースの実装クラスはRedisTemplate自体であり,主にRedisキー,トランザクション,実行スクリプトなどのコマンドのサポートを提供し,データの読み書きを担当しない.
コードを選択してみましょう.
public void watch(K key) {
final byte[] rawKey = rawKey(key);
execute(new RedisCallback<Object>() {
public Object doInRedis(RedisConnection connection) {
connection.watch(rawKey);
return null;
}
}, true);
}
これはトランザクションの監視命令であり,中の実装もコールバックRedisCallbackを用いていることがわかる.これらのapiはconnectionのapiでカプセル化されている.
2.ValueOperationsインタフェースの説明
このインタフェースの実装クラスはDefaultValueOperationsであり、defaultというクラスは同時にAbstractOperationを継承し、このクラスの構造関数を見てみましょう.
DefaultValueOperations(RedisTemplate<K, V> template) {
super(template);
}
非公開ではtemplateに転送して構築する必要がある.しかし、私たちはアクセスできません.しかし、焦らないでください.RedisTemplateでは、opsForValue()という工場方法が提供されています.このメソッドは、デフォルトの操作クラスを返します.また,注入は注記@Resource(name=「redisTemplate」)によって直接行うことができる.
@Resource(name = "redisTemplate")
private ValueOperations<String, Object> vOps;
不思議なことに、親子の兄弟関係のない2つのクラスが、どうしてお互いに注入できるのだろうか.これはSpringのEditorメカニズムで、ValueOperationsEditorというクラスを検索するとわかりますが、Springは注入時にEditorのsetValueメソッドを呼び出します.Springソースを知っているはずです.私も他人の文章を読んで理解したのです.記事のアドレス
実はtemplateでValueOperationsを注入できるほか、上のいくつかのoperationsやHashOperationsを注入することもできます.
DefaultValueOperationsは、すべてのRedis文字列タイプの操作apiを提供します.例えばset、get、incrなどです.これらの方法を使用すると、保存したものを自分でシーケンス化したり、逆シーケンス化したりする必要がなく、任意のjavaタイプを簡単に直接保存することができます.
注意:汎用タイプ、およびシーケンス化器はRedisTemplateから来ています.独自にjsonまたは他のシーケンス化を行う場合は、RedisTemplateで変更する必要があります.
また,メンバーlistOps,setOps,zSetOpsという次の操作クラスについては,言うまでもなく,原理はValue Operationsと同様に,他のいくつかのデータ型の実装である.
3.HashOperationsインタフェースの説明
このインタフェースはメンバー変数を定義していないが,Hashにとって追加のKeyとValueが追加され,汎用型はメンバーの前で追加定義できないため,直接方法が提供されたと推測される.しかし、幸いにもJdkSerializerが使われているので、この定義はどんなタイプの汎用型でも運転異常は発生しません.
public void put(K key, HK hashKey, HV value) {
final byte[] rawKey = rawKey(key);
final byte[] rawHashKey = rawHashKey(hashKey);
final byte[] rawHashValue = rawHashValue(value);
execute(new RedisCallback<Object>() {
public Object doInRedis(RedisConnection connection) {
connection.hSet(rawKey, rawHashKey, rawHashValue);
return null;
}
}, true);
}
これは基本的なputメソッドであり,keyとhashkeyの2つが示され,異なるシーケンス化メソッドが呼び出される.メソッドを見てみると、シーケンス化hashkeyはtemplateのhashkeyserializerを使用しており、デフォルトはjdkserializerであり、これはredisコンソールに何が保存されているのか分からないことになります.気に入らない場合は、redistemplate.sethashkeyserializer()で設定できます.
hash構造のすべてのapiについても,hsetがputになり,hgetがgetになるなど,このクラスでカプセル化されている.自分でapiを見る必要があります.誤解されてはいけない.
4.まとめ
ここまで、基本的な使用はもう終わりました.ざらざらしていて、私が誤解しやすい点を重点的に説明しただけで、基礎的な操作は皆さん自身で少し見る必要があります.レンガを投げて玉を引く役割を果たしましょう.次に、この2ヶ月でRedisで遭遇したいくつかの問題をまとめて説明するかもしれません.
gitにコードを置きましたアドレスはhttps://github.com/55375829/learnああ、中のspjedisは当時自分が勉強していたときに建てたプロジェクトです.