SpringBootシリーズ-Redis(17)

3971 ワード

個人ブログ:haichenyi.com.ご注目ありがとうございます
前の記事ではspring bootが持つキャッシュSimpleCacheについてお話ししましたが、彼の下層は実際にはHashMapであり、このキャッシュはメモリの中に置かれているという弊害もあります.例えば、メモリサイズ、サーバが閉じた後、キャッシュがなくなります.

概要


  実際の開発では、キャッシュミドルウェア:Redis、EHCache、MemCacheなどが一般的に使われていますが、今日は、よく耳にするRedisについてお話しします.
 Redisは、データベース、キャッシュ、メッセージ・ミドルウェアとして使用できるメモリ内のデータ構造ストレージ・システムであるオープン・ソース(BSDライセンス)です.文字列(strings)、ハッシュ(hashes)、リスト(lists)、セット(sets)、順序付きセット(sorted sets)、範囲クエリー、bitmaps、hyperlogs、地理空間(geospatial)インデックス半径クエリーなど、さまざまなタイプのデータ構造をサポートします.Redisにはレプリケーション(replication)、LUAスクリプト(Lua scripting)、LRU駆動イベント(LRU eviction)、トランザクション(transactions)、および異なるレベルのディスク持続化(persistence)、Redis哨兵(Sentine)および自動パーティション(Cluster)による高可用性(highavailability)が内蔵されています.
原理を追及しないで、Redisをこのように理解することができます.
  • は多種のデータ型をサポートし、redisはset、zset、list、hash、stringの5種類のデータ型をサポートし、操作が便利である.
  • メモリデータベースとして、最も心配されているのは、万が一マシンがダウンタイムすると、データが消えてしまうことです.redisはRDBとAOFを用いてデータの永続化ストレージを行う.プライマリスレーブデータは同時にrdbファイルを生成し,バッファに新しいデータ更新操作を追加して対応する同期を行う.
  • はサーバとデカップリングされ、キャッシュは個別のサーバであり、プロジェクトが再起動されるとキャッシュは依然として存在します.
  • 私たちが使うと、それは私たちに一連の方法のインタフェースを提供して、私たちはそのAPIを呼び出すだけでいいです.

  • 使用法


    最初のステップで、イニシエータを追加します.
    
        org.springframework.boot
        spring-boot-starter-data-redis
    
    

      第2歩、あなたのサーバーのアドレスを配置して、配置しないで、デフォルトはローカルです:配置情報は同じように自動配置クラス--dataパッケージ--redisパッケージ--RedisPropertiesクラスの中で探しに行きます
    #  redis     ,      
    spring.redis.host=127.0.0.1
    

    手順3では、redisの構成クラスが追加され、データベースに複雑なデータが追加された場合でも、Json形式で正常に表示されます.
    @Configuration
    @EnableCaching
    public class RedisConfig extends CachingConfigurerSupport{
    @Bean
        public RedisTemplate redisTemplate(RedisConnectionFactory factory) {
            RedisTemplate template = new RedisTemplate<>();
            RedisSerializer redisSerializer = new StringRedisSerializer();
            Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);
            ObjectMapper om = new ObjectMapper();
            om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
            om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
            jackson2JsonRedisSerializer.setObjectMapper(om);
    
            template.setConnectionFactory(factory);
            //key     
            template.setKeySerializer(redisSerializer);
            //value   
            template.setValueSerializer(jackson2JsonRedisSerializer);
            //value hashmap   
            template.setHashValueSerializer(jackson2JsonRedisSerializer);
            return template;
        }
    }
    

    第4歩、正常にインタフェースを書いて、サービス層の中で、自分でデータをキャッシュの中に書きます.
    package com.haichenyi.springboottask.service;
    
    import com.haichenyi.springboottask.Provider;
    import com.haichenyi.springboottask.mapper.ProviderMapper;
    import com.haichenyi.springboottask.utils.RedisClient;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Service;
    
    /**
     * @Desc
     * @Auther    
     * @Time 2019/11/6
     */
    @Service
    public class ProviderService {
        @Autowired
        ProviderMapper providerMapper;
    
        @Autowired
        RedisClient redisClient;
    
        public Provider getProviderById(Integer pid) {
            Provider provider = (Provider) redisClient.get(pid);
            if (provider != null) {
                return provider;
            }
            Provider provider1 = providerMapper.getProviderByPid(pid);
            redisClient.set(pid, provider1);
            return provider1;
        }
    }
    

    上記のコードでは、idでProviderを取得します.まずキャッシュから取りに行きます.もし、取れない場合は、キャッシュがないことを示します.では、データベースから取りに行きます.取った後、このデータをキャッシュに入れます.
     は前のデフォルトキャッシュの注釈の機能で、redisでは私たち自身が実現する必要があります.
    ここのRedisClientクラスは、自分でカプセル化したredisが使用するクラスで、redisがどのように使用するかについては、redisの中国語公式サイトのコマンドページがはっきり書かれています.
    ローカルコンピュータにRedisサービスがインストールされていることを覚えています.次にredisビジュアル化ツールをローカルにインストールします.