次のように春のブートRedisの統合手順は以下のとおりです。
1、関連のpom.xml依存ジャーに配置:
<! -加载春のブートRedisの包- > <依存> <groupIdを> org.springframework.boot </ groupIdを> <たartifactId>春・ブート・スターター・データのRedis </たartifactId> </依存関係>
2、でSpringbootコア構成ファイルapplication.properties Redisの接続の構成情報:
spring.redis.host = 192.168.230.128 spring.redis.port = 6379 spring.redis.password = 123456
3、上記の手順の構成は、春ブーツが自動的RedisTemplateを設定し、射出redisTemplateのRedisのはクラスで動作する必要があります:
Redisのエンティティクラスは、インタフェースの動作シーケンスを実装する必要があります
Redisのにキーの発見の成功は、いくつかの特別なエンコード形式を持った後、可読性が高くありません
春ブーツは、一般的な<文字列、文字列>、<オブジェクト、オブジェクト>を書き込むことができる、私たちを助けるためにredisTemplateクラスを注入し
高い並行性の場合には、この方法は問題であり得る:キャッシュされない場合があり、データベース・サーバ上の圧力を増加させるために、データベースクエリに取っています。
流通サービスにアクセスするためのシミュレートされたマルチスレッド方式でのアクションで
@Autowired プライベートTClassService tClassService。 @RequestMapping( "index.do" ) 公共@ResponseBodyオブジェクトリスト(){ // 模拟高并发 Runnableを実行可能に= 新しいRunnableを(){ @Override 公共 ボイドラン(){ tClassService.list(); } }。 ExecutorServiceのExecutorServiceの = Executors.newFixedThreadPool(10 )。 以下のために(int型、iは100 <; I = 0 iは++ ){ (実行可能)executorService.submit。 } を返す)(tClassService.listします。 }
サービスメソッドのプロンプトを変更します。
公共の一覧<はTClass> リスト(){ RedisSerializer redisSerializer = 新新StringRedisSerializer(); redisTemplate.setKeySerializer(redisSerializer); // まずキャッシュクエリ 一覧<はTClass>リスト=(一覧 <はTClass>)redisTemplate.opsForValue()を取得。 (「data.class」); // キャッシュにデータがない場合は、データベースからデータをフェッチするため のIF(一覧== nullの){ System.out.printlnは(「データベースのクエリは」); // データベースからデータを取得し、キャッシュにクエリ結果の後に 一覧= classMapper.list(); redisTemplate.opsForValue()SET(。 "data.class" 、リスト); } 他{ のSystem.out.println( "クエリキャッシュ" ); } 戻り値のリスト; }
むしろ、クエリキャッシュよりもデータベース検索で発行され、その多くを起動し、テストの結果、
原則:メソッドへの同時マルチスレッディング
解決策:同期方法
方法synchronizedキーワードのフォルダは、同期方法は、効率が低すぎます
二つの解決策:同期コードブロック
公共の一覧<はTClass> リスト(){ RedisSerializer redisSerializer = 新新StringRedisSerializer(); redisTemplate.setKeySerializer(redisSerializer); // まずキャッシュクエリ 一覧<はTClass>リスト=(一覧 <はTClass>)redisTemplate.opsForValue()を取得。 ( "data.class" ); IF(一覧== nullが){ // 見つかった場合、ロック、および効率改善しない 同期(本){ リスト =(一覧<はTClass>)redisTemplate.opsForValue()GETを。 (「data.class」); // データベースからデータをフェッチするキャッシュにデータが存在しない場合 IF(一覧== nullを){ System.out.println( "データベースクエリ" ); // 後にキャッシュにデータベースのクエリ結果からデータを取得 一覧= classMapper.list(); 。RedisTemplate.opsForValue()SET( "data.class" 、リスト); } 他{ するSystem.out.println( "クエリキャッシュ" ); } } } 他{ するSystem.out.println( "クエリキャッシュ" ); } 戻り値のリスト; }
テストの結果、最初のクエリのデータベース、残りはクエリキャッシュされています
クラスタコンフィギュレーションモードRedisのセンチネル:
センチネル#redisクラスタモードの設定 spring.redis.password = Redisの spring.redis.sentinel.master = mymaster spring.redis.sentinel.nodes = 192.168.179.128:26380,192.168.179.128:26382,192.168.179.128:26384