Spring Redisの使用を深く理解する(三)、RedisTemplateの操作クラスを使用してRedisにアクセスする

5626 ワード

前の記事では、RedisTemplateの注釈トランザクションのサポートと、提供されるシーケンス化器について説明しました.
トランザクションは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は当時自分が勉強していたときに建てたプロジェクトです.