SpringとJedisの集積


回転:http://www.cnblogs.com/yjmyzz/p/4113019.html
まずSpringという宇宙無敵のオープンソースフレームを着用せざるを得ません.http://projects.spring.io/spring-data/ ここから見れば、今流行っているレディ、ソロ、ハdoop、モンゴDB、couchBase…全部が財布に入っています.redis統合には、主にspring-data-redisが使われています.
 
使用手順:
一、pom依存項追加
        <dependency>
            <groupId>org.springframework.data</groupId>
            <artifactId>spring-data-redis</artifactId>
            <version>1.4.1.RELEASE</version>
        </dependency>
他のSpringに必要なコンポーネントは、Core、Bensなどです.ご自分で追加してください.
観察してみます
Spring与Jedis的集成_第1张图片
jecdis、jredisなどはjavaのredis clientを常用してすでに支持して、後でRedissonに統合することができますかを知らないで、spring-data-redisは1つのとても役に立つ種類を提供しました:StringRedis Template

ほとんどのキャッシュアプリケーションシーンでは、文字列は最も一般的なキャッシュ項目であり、StringRedis Templateで簡単に対処できます.
 
二、スプリング配置
 
View Code
ここではSentinelモードを使ってredis接続を構成しています.上編から学んで、sentinelは高い利用可能なアーキテクチャです.個人的には生産環境でsentinelモードを使うことを勧めています.
注:26-28行、試験を経て、もしデフォルトポートを修正したら、ここでHostNameとportを詳細に指定しなければならない.さもなければ運行後、正確にキャッシュを読めなくなり、下記の構成を参照してください.
    <bean id="jedisConnFactory"
          class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory">
        <property name="hostName" value="10.6.53.xxx"/>
        <property name="port" value="8830"/>
        <property name="usePool" value="false"/>
        <constructor-arg ref="redisSentinelConfiguration"/>
    </bean>

このうち、hostNameは現在のmasterのIPであり、レポートはRedis-serverの実行ポート(非sentinelポート)であり、またuse Poolをfalseとして設定します.sentinelはMasterノードを自動的に切り替えることがありますので、現在のmasterノードがどのマシンなのか分かりません.前に提示されたコマンドを使ってもいいです.またはjavaコードで出力して、下記のコードを参照してください.
1         ApplicationContext ctx = new FileSystemXmlApplicationContext("/opt/app/spring-redis.xml");
2         StringRedisTemplate template = ctx.getBean(StringRedisTemplate.class);
3         for (RedisServer m : template.getConnectionFactory().getSentinelConnection().masters()) {
4             logger.debug(m);
5         }
また ここのvalue値はfalseに設定することを提案しています.trueに変更したら、実際にテストしてみたら、いくつかの環境で次のようなエラーが発生します.
redis.clients.jedis.exceptions.JedisData Exception:ERR unknown command'SET'
その他の注意事項:
設定ファイルのsentinels属性のSetのノードは、必ずしも同じmasterではなく、複数のmasterに帰属することができます.すなわち、ここに10のnode情報が配置されていたら、そのうちの1−3はmaster 1に属し、残りの4−10はmaster 2に属します.これも許可されます.
このように呼び出すと、StringRedis Template.get Connection Factory().get SentinelConnection().masters()でmasterのリストに戻り、必要に応じてコードに必要なMasterにキャッシュを書き込みます.
 
三、ユニットテスト
 
View Code
運転してください.行雲流水のような出力:

情報:Created JedisPool to マスター 10.6.144.***:7030http://yjmyzz.cnblogs.com/---------0 A B-------C B---------SHA-上海虹橋PVG-浦東PEK-北京-------

赤い表示部分に注意して、eclipse操作台の出力から、現在のmasterはどのサーバーですか?
ここでもう一つの技術を追加します.マスターとslaaveを遍歴したいなら、下記のコードを参照してください.
 
View Code
以下のような結果を出力します.
マスター=>172.20.16.191:6379 slaaves of 172.20.16.191:6379=>172.20.16.192:6379
注:ここで出力されたslaavesのリストは、実際にテストしたところ、redis server端の配置に従ってslaave nodeのリストに戻ります.これらのnodeは死んでも生きています.言い換えれば、あるslaaveがダウンしても、ここに戻ってきます.
 
三、POJO対象のキャッシュ
Springから提供されたStringRedis TemplateはStringだけで操作できます.ほとんどの場合は十分ですが、redisにPOJOオブジェクトを保存する必要があるなら、StringRedis Templateのソースを参考にしてObject RedisTemplateを拡張します.
 
View Code
このように使ってもいいです.
 
View Code
この中のSampleBeanの定義は以下の通りである.
 
View Code
注:標準的なStringタイプではないので、redisコンソールで、使います./redis-cli get mBenはキャッシュ内容が見えないので、nilの出力しか得られません.setが成功していないと誤解しないでください.コードによりキャッシュ値を正常にゲットすることができます. 
また、POJO対象のキャッシュについては、もう2つの注意事項があります.
a) POJO類にはデフォルトの無参画構造関数が必要です.そうでないと、アンチプログレッシブ時にエラーが発生します.
b) ObjectRedis TemplateのTはインターフェースではありません.例えばDominModelAはインターフェースからIModelAを引き継ぎます.Object Redis Templateを使う時、ObjectRedisTemplate<Dommann ModelA>と書きます.
菩提樹の下の楊過
出典:http://yjmyzz.cnblogs.com 
この著作権は作者とブログ園に共有されています.転載を歓迎します.しかし、作者の同意なしにこの声明を保留しなければなりません.文章のページの明確な位置で原文の接続を提供します.そうでなければ、法律責任を追及する権利を保留します.