ssm+redis擬似クラスタ(哨兵モード)
6376 ワード
プロジェクトは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
1)Mavenのpom.xmlファイルでredisの参照を追加
2)redisを増加する.propertiesファイル、ファイルにsentinelを指定するだけでいい(masterとslaveの構成と勘違いしていた)ファイルの内容は以下の通りです.
3)SpringでのアプリケーションContext.xmlファイルで、Redisの構成を追加
特に説明: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を使用することができ、多くの人がハードコーディングでコードにキャッシュを使用している.このようなビジネスコードへの侵入性は強く、後期のメンテナンスや拡張に不便である.ここでは注釈方式を使用し、クラスやメソッド名に注釈を追加するだけでよい.
4)カスタムキージェネレータ
デフォルトジェネレータはSimpleKeyGeneratorで、生成されたKeyはHashCode変換されたもので、Keyで指定されたインタフェースのキャッシュをクリアすることはできません.そのため、Keyジェネレータを独自に実装し、Keyジェネレータ実装クラスCacheKeyGeneratorを追加し、KeyGeneratorインタフェースを実装する必要があります.
ここでKeyの生成ルールはクラスの限定名+メソッド名であり,同じ項目でkeyが重複しないことを確保でき,クエリ条件もKeyの一部として必要であればparamsを加えることができる.
KeyGeneratorはアプリケーションContextに構成する必要がある.xmlファイルでは、次のようになります.
原文住所:http://blog.csdn.net/kity9420/article/details/53571718
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