Redis実装キャッシュ機能の概要

4457 ワード

学んで時々それを習うのも,言うまでもない.今日はSpringboot統合Redis実装キャッシュ機能についてまとめます.RedisというNoSQLデータベースの応用が最も広範なシーンはキャッシュであり、分散システムには共有session、ビジネスデータキャッシュの読み取り、分散ロックなど、多くの場所でキャッシュが必要である.Springbootはredisの操作を深くカプセル化しているため、今日は主にsessionとビジネスデータを共有するキャッシュをまとめます.
まず共有セッションといえば、分布式システム共有セッションには主に3つの方式があり、1つはセッションレプリケーションであり、1つはIP hashであり、1つはストレージ共有であり、セッションレプリケーションにはtomcatを配置する必要があり、簡単で、ネット上のチュートリアルが大きい.IP hashはnginxを設定するだけで、言わないで、ストレージ共有だけを話して、原因は前の2つの方法に比べて、それはリアルタイムで共有して、信頼性が高くて、拡張性が良いです.実現には3つのステップが必要です.
1.ガイドパッケージ


    org.springframework.boot

    spring-boot-starter-data-redis





    org.springframework.session

    spring-session-data-redis


2.構成
# Redis     

spring.redis.host=localhost

# Redis       

spring.redis.port=6379

# Redis       (    )

spring.redis.password=

3.参照
Springbootはセッション共有を実現するのに非常に便利で、@EnableRedisHttpSession注釈を1つだけ必要とします.この注記をspringboot起動クラスに追加します.
セッション共有は実現します.リクエストを勝手に書いてhttprequestからセッションを操作することができます.ここでは省略します.
業務データのキャッシュについては、Redisで業務データをキャッシュする方法も2つあります.1つは、RedisTemplateでキャッシュが必要な業務データを直接操作し、@AutowiredでRedisTemplateを注入してredisを操作する方法で、メリットは制御可能で、自由度が大きく、欠点はくどく、コード量が大きいことです.もう1つは注釈操作で、一般的には構成クラスを書きます.
/**
 * @author hulonghai
 * redis   
 */
@Configuration
@EnableCaching
public class CacheConfig extends CachingConfigurerSupport{
 
    @SuppressWarnings("rawtypes")
    @Bean
    public CacheManager cacheManager(RedisTemplate redisTemplate) {
        RedisCacheManager rcm = new RedisCacheManager(redisTemplate);
        //        ( )
        rcm.setDefaultExpiration(600);
        return rcm;
    }
 
    @Bean
    public RedisTemplate redisTemplate(RedisConnectionFactory factory) {
        StringRedisTemplate template = new StringRedisTemplate(factory);
        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.setValueSerializer(jackson2JsonRedisSerializer);
        template.afterPropertiesSet();
        return template;
    }
 
}

コンフィギュレーションクラスには@EnableCachingを付ける必要があります.デフォルトのコンフィギュレーションのみを使用する場合は、コンフィギュレーションクラスを起動クラスに入力して、コンフィギュレーションクラスを書かないことができますが、一般的には実際のビジネスニーズを満たすことはできません.キャッシュの期限切れなどの設定が必要なため、cacheManagerメソッドはキャッシュの期限切れ時間を構成しています.他にも、実際のビジネスに応じて追加できる構成がたくさんあります.
次に、オペレーション・ビジネスで注釈を追加することでキャッシュを実現します.注釈は3つあります.
@Cacheable:クエリーおよび新規作成用
オプションのプロパティ:cacheName/value:キャッシュコンポーネントの名前を指定します.key:データをキャッシュするために使用されるkeyで、指定できます.デフォルトで使用されるメソッドパラメータの値
@Cacheable(value="user", key="'users_'+#id")
public User findUser(Integer id) {
    User user = new User();
    user.setUsername("hlhdidi");
    user.setPassword("123");
    user.setUid(id.longValue());
    System.out.println("log4j2  ?");
    logger.info("  user,   :{},  :{}",user.getUsername(),user.getPassword());
    return user;
}

@CachePut:更新用
メソッドを呼び出すとともに、キャッシュデータを更新し、同期更新キャッシュに達することができる.データベースのデータを変更し、キャッシュの実行タイミングを更新します:1、実行方法を先に呼び出します;2、目標メソッドの結果をvalueにキャッシュする:キャッシュ名key:キャッシュされたkey#resultはメソッドが返した結果を表す(更新されたkeyとクエリーが一致していることを確認し、データベースデータとキャッシュ内のデータを同時に更新できる)
@CachePut(value="user",key = "#result.id")
    public User updateUser(User user){
        System.out.println("updateUser:"+user);
        userMapper.updateUser(user);
        return user;
}

@CacheEveict:削除用
≪キャッシュ・パージ|Cache Purge|oem_src≫:データを削除し、キャッシュ・キーを削除することを目的としています.パージするデータを指定します(データベースとキャッシュ内のデータを同時に削除できます).allEntries=true:このキャッシュ内のすべてのデータbeforeInvocation=falseを指定します.キャッシュのクリアがメソッドの前に実行されるかどうか、デフォルトの代表はメソッドの後に実行されます
@CacheEvict(value = "user",key = "#id")
public void deleteUser(Integer id){
    System.out.println("deleteUser:"+id);
    userMapper.deleteUserById(id);
}

これにより、データを削除・変更する際のビジネス・データのキャッシュ機能が実現され、コードが非常に簡潔になります.
Redisの用途はまだたくさんあります.例えば、購読メッセージを発表したり、キューを作ったり、setをしたり、べき乗などのアクセスをやり直したり、zsetをランキングにしたりすることができます.後でRedisのいろいろな遊び方をまとめ続けます.