ssm+redis擬似クラスタ(哨兵モード)

6376 ワード

プロジェクトはredisをキャッシュに使用します.いくつかの関連する良い文章に出会って、みんなに分かち合います:

1.Redis擬似クラスタ


正確には、哨兵モードは1主多従の構造であり、真のクラスタに属していない.真のクラスタは多主多従の構造であり、複数の異なる物理アドレスのホストが必要である.
腕例は1台の機械で偽クラスタを構築する. 
まず、1台の監視サーバー、すなわちSentine、1台のメインサーバーMaster、複数台のスレーブサーバーSlaveが必要である.具体的な配置は別のブログ「RedisシーケンスのSentine」を参考にして、Sentine、Master、Slaveがすでに配置されていると仮定し、対応するアドレスは以下のように分けられる.
Sentinel 127.0.0.1:26379,127.0.0.1:26479 Master 127.0.0.1:10003 Slave 127.0.0.1:10001,127.0.0.1:10002
 

2、java側の配置


1)Mavenのpom.xmlファイルでredisの参照を追加
 
 

org.springframework.data spring-data-redis 1.5.2.RELEASE 

 

 

redis.clients 

jedis 

2.9.0 


2)redisを増加する.propertiesファイル、ファイルにsentinelを指定するだけでいい(masterとslaveの構成と勘違いしていた)ファイルの内容は以下の通りです.
redis.sentinel.host1=127.0.0.1 

redis.sentinel.port1=26379 

redis.sentinel.host2=127.0.0.1 

redis.sentinel.port2=26479 

redis.pool.maxTotal=1024 

redis.pool.maxIdle=200 

redis.pool.maxWaitMillis=1000 

redis.pool.testOnBorrow=true redis.pool.timeBetweenEvictionRunsMillis=30000 redis.pool.minEvictableIdleTimeMillis=30000 redis.pool.softMinEvictableIdleTimeMillis=10000 redis.pool.numTestsPerEvictionRun=1024 

#1000*60*60*1 

redis.pool.expire=3600000 

redis.pool.unlock=false

3)SpringでのアプリケーションContext.xmlファイルで、Redisの構成を追加
 
 

 

 classpath:config/redis.properties  

 


 
  

 

 

 

 

 

  
 

 

 

 

 

 


  
 

 

 



  

 

 

 

 

 

 

 

 

 

 

 

 

 

 


 
  


特に説明:1、Sentineのクラスタモデルは、Java側構成の場合、どのSentineがあるかを指定するだけでよい.MasterとSlaveを指定する必要はない.のcache-manager属性のデフォルト値はcacheManagerで、デフォルトでは指定しなくてもいいです.定義したCacheManager名がcacheManagerでない場合は、指定を表示する必要があります.4、もう一つの属性はmodelで、オプション値はproxyとaspectjで、デフォルトはproxyで、model=proxyの場合、キャッシュメソッドが音名のクラスの外部で呼び出された場合にのみspring cacheが有効になります.言い換えれば、同じクラスの1つのメソッドで現在のクラスのキャッシュメソッドを呼び出すと、キャッシュが有効になりませんが、model=aspectjの場合、この問題はありません.またmodel=proxyの場合,@Cacheableなどの注釈をpublicメソッドに加えるとキャッシュが有効になりprivateに加えると有効になりませんが,model=aspectjの場合もこの問題はありません.5、proxy-target-classプロパティを指定することもできます.classをプロキシするかどうか、デフォルトはfalseです.@Cacheable,@cacheEveictなどはインタフェースにも表記可能であり,これはインタフェースベースのエージェントにとっては問題ないが,proxy-target-classをtrueまたはmodeをaspectjとするとclassに直接基づいて動作し,インタフェースに定義された@CacheableなどのCache注釈は認識されず,対応するSpring Cacheも機能しないことに注意する.
以上の準備が完了すると、JavaコードでRedisを使用することができ、多くの人がハードコーディングでコードにキャッシュを使用している.このようなビジネスコードへの侵入性は強く、後期のメンテナンスや拡張に不便である.ここでは注釈方式を使用し、クラスやメソッド名に注釈を追加するだけでよい.
@Override 

@Cacheable(value="user")

public UserVO selectUserById(String userId) throws Exception {

return userDao.selectUserById(userId);

 }

4)カスタムキージェネレータ
デフォルトジェネレータはSimpleKeyGeneratorで、生成されたKeyはHashCode変換されたもので、Keyで指定されたインタフェースのキャッシュをクリアすることはできません.そのため、Keyジェネレータを独自に実装し、Keyジェネレータ実装クラスCacheKeyGeneratorを追加し、KeyGeneratorインタフェースを実装する必要があります.
public class CacheKeyGenerator implements KeyGenerator { 

@Override 

public Object generate(Object target, Method method, Object... params) {

StringBuilder key = new StringBuilder(); key.append(target.getClass().getName());

key.append(".");

key.append(method.getName());

return key.toString();

}

}

ここでKeyの生成ルールはクラスの限定名+メソッド名であり,同じ項目でkeyが重複しないことを確保でき,クエリ条件もKeyの一部として必要であればparamsを加えることができる.
 
KeyGeneratorはアプリケーションContextに構成する必要がある.xmlファイルでは、次のようになります.
  


原文住所:http://blog.csdn.net/kity9420/article/details/53571718