Redis実装キャッシュ機能の概要
4457 ワード
学んで時々それを習うのも,言うまでもない.今日はSpringboot統合Redis実装キャッシュ機能についてまとめます.RedisというNoSQLデータベースの応用が最も広範なシーンはキャッシュであり、分散システムには共有session、ビジネスデータキャッシュの読み取り、分散ロックなど、多くの場所でキャッシュが必要である.Springbootはredisの操作を深くカプセル化しているため、今日は主にsessionとビジネスデータを共有するキャッシュをまとめます.
まず共有セッションといえば、分布式システム共有セッションには主に3つの方式があり、1つはセッションレプリケーションであり、1つはIP hashであり、1つはストレージ共有であり、セッションレプリケーションにはtomcatを配置する必要があり、簡単で、ネット上のチュートリアルが大きい.IP hashはnginxを設定するだけで、言わないで、ストレージ共有だけを話して、原因は前の2つの方法に比べて、それはリアルタイムで共有して、信頼性が高くて、拡張性が良いです.実現には3つのステップが必要です.
1.ガイドパッケージ
2.構成
3.参照
Springbootはセッション共有を実現するのに非常に便利で、@EnableRedisHttpSession注釈を1つだけ必要とします.この注記をspringboot起動クラスに追加します.
セッション共有は実現します.リクエストを勝手に書いてhttprequestからセッションを操作することができます.ここでは省略します.
業務データのキャッシュについては、Redisで業務データをキャッシュする方法も2つあります.1つは、RedisTemplateでキャッシュが必要な業務データを直接操作し、@AutowiredでRedisTemplateを注入してredisを操作する方法で、メリットは制御可能で、自由度が大きく、欠点はくどく、コード量が大きいことです.もう1つは注釈操作で、一般的には構成クラスを書きます.
コンフィギュレーションクラスには@EnableCachingを付ける必要があります.デフォルトのコンフィギュレーションのみを使用する場合は、コンフィギュレーションクラスを起動クラスに入力して、コンフィギュレーションクラスを書かないことができますが、一般的には実際のビジネスニーズを満たすことはできません.キャッシュの期限切れなどの設定が必要なため、cacheManagerメソッドはキャッシュの期限切れ時間を構成しています.他にも、実際のビジネスに応じて追加できる構成がたくさんあります.
次に、オペレーション・ビジネスで注釈を追加することでキャッシュを実現します.注釈は3つあります.
@Cacheable:クエリーおよび新規作成用
オプションのプロパティ:cacheName/value:キャッシュコンポーネントの名前を指定します.key:データをキャッシュするために使用されるkeyで、指定できます.デフォルトで使用されるメソッドパラメータの値
@CachePut:更新用
メソッドを呼び出すとともに、キャッシュデータを更新し、同期更新キャッシュに達することができる.データベースのデータを変更し、キャッシュの実行タイミングを更新します:1、実行方法を先に呼び出します;2、目標メソッドの結果をvalueにキャッシュする:キャッシュ名key:キャッシュされたkey#resultはメソッドが返した結果を表す(更新されたkeyとクエリーが一致していることを確認し、データベースデータとキャッシュ内のデータを同時に更新できる)
@CacheEveict:削除用
≪キャッシュ・パージ|Cache Purge|oem_src≫:データを削除し、キャッシュ・キーを削除することを目的としています.パージするデータを指定します(データベースとキャッシュ内のデータを同時に削除できます).allEntries=true:このキャッシュ内のすべてのデータbeforeInvocation=falseを指定します.キャッシュのクリアがメソッドの前に実行されるかどうか、デフォルトの代表はメソッドの後に実行されます
これにより、データを削除・変更する際のビジネス・データのキャッシュ機能が実現され、コードが非常に簡潔になります.
Redisの用途はまだたくさんあります.例えば、購読メッセージを発表したり、キューを作ったり、setをしたり、べき乗などのアクセスをやり直したり、zsetをランキングにしたりすることができます.後でRedisのいろいろな遊び方をまとめ続けます.
まず共有セッションといえば、分布式システム共有セッションには主に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のいろいろな遊び方をまとめ続けます.