SpringBoot_統合のRedis

次のように春のブート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

 

おすすめ

転載: www.cnblogs.com/Tunan-Ki/p/11762403.html