1. JetCacheの基本概念
1. JetCache は、Alibaba Group がオープンソース化した Spring および Redis に基づく分散キャッシュ フレームワークです。その主な機能は次のとおりです。
- 注釈ベース: キャッシュの構成と使用は注釈によって実装され、コードは簡潔で保守が簡単です。
- マルチレベル キャッシュ: マルチレベル キャッシュをサポートし、ローカル メモリ、Redis、Tair、Memcached などのさまざまなキャッシュ ストレージにデータをキャッシュして、キャッシュ ヒット率とクエリ効率を向上させることができます。
- 複数のキャッシュ プロトコル: Redis、Tair、Memcached およびその他のキャッシュ プロトコルをサポートし、優れた拡張性と互換性を備え、キャッシュの保存方法を柔軟に切り替えることができます。
- ハイパフォーマンス: JetCache は、分散環境での高い同時アクセスのためにキャッシュされたデータ構造とクエリ アルゴリズムを最適化し、ハイパフォーマンスを提供します。
- 使いやすさ: JetCache の API は使いやすく、Spring インジェクションとカスタム構成をサポートし、豊富なキャッシュ操作機能を提供するため、中小規模のアプリケーション開発に非常に適しています。
2. JetCache は、主に次のようなさまざまなシナリオに適用できます。
- ホット データ キャッシュ: JetCache は、一般的に使用されるホット データをローカル キャッシュまたはリモート キャッシュにキャッシュし、データベースやその他のデータ ソースへのアクセスを減らし、応答パフォーマンスとパフォーマンスの安定性を向上させることができます。
- マルチレベル キャッシュの融合: JetCache は複数のキャッシュ ストレージ タイプをサポートしており、異なるキャッシュ ストレージ タイプを統合して、より高いキャッシュ効率とヒット率を実現できます。
- 高い同時読み取りおよび書き込み: JetCache のキャッシュ アルゴリズムは、高い同時読み取りおよび書き込みシナリオを最適化し、プログラムのパフォーマンスを向上させ、システムの負荷を軽減します。
- 高速アクセス クエリ: JetCache はキャッシュを使用して高速クエリとアクセスを実現し、待ち時間を短縮し、ユーザー エクスペリエンスを向上させます。
2. API と JetCache の使用:
- キャッシュ管理: JetCache は、キャッシュを作成するための CacheBuilder クラスと、取得、配置、削除などのキャッシュを操作するための Cache オブジェクトを提供します。Cache オブジェクトの put メソッドを呼び出すときに、アノテーション @Cache を使用して、キャッシュ時間や名前などの構成を設定できます。
- 注釈のサポート: JetCache は、@Cached、@CacheUpdate、@CacheInvalidate など、キャッシュ操作を実装するためのさまざまな注釈を提供します。注釈を使用すると、キャッシュのウォームアップ、削除、更新などのキャッシュ操作を簡単に実行できます。
- キャッシュ タイプ: JetCache は、ローカル メモリ、Redis、Tair、Memcached などの複数のキャッシュ タイプをサポートしており、ビジネス ニーズに応じてキャッシュ タイプを選択できます。
- Spring 統合サポート: JetCache は Spring 統合サポートを提供します。これにより、アノテーションを介してキャッシュを挿入および構成できるため、使用プロセスが簡素化されます。
3. SpringBoot は JetCache を統合します
1. 依存関係をインポートする
<dependency>
<groupId>com.alicp.jetcache</groupId>
<artifactId>jetcache-starter-redis</artifactId>
<version>3.0.1</version>
</dependency>
2.ymlの設定
jetcache:
remote:
type: redis
# 修改远程缓存名称
default:
#redis地址
servers: 127.0.0.1:6379
#redis中的db索引,默认为0
database: 0
#redis的密码,如果没有密码则不需要配置
password:
#连接redis的超时时间(单位:毫秒)
connectTimeout: 5000
#操作redis的超时时间(单位:毫秒)
timeout: 5000
#redis连接池最大连接数
maxTotal: 100
# 如果你使用了redis集群
cluster:
servers: "127.0.0.1:6379,127.0.0.1:6380,127.0.0.1:6381"
#redis集群的密码,如果没有密码则不需要配置
password:
#jedisCluster连接池最大连接数
maxTotal: 100
local:
# 本地缓存元素最大数量
default:
limit: 10000
# 如果你想重写某个缓存的配置
myCache:
limit: 100
@Cached アノテーションは @CreateCache 属性とよく似ていますが、さらにいくつかあります。
属性 | デフォルト | 説明する |
---|---|---|
キャッシュ名 | 「」 | キャッシュ名 |
エリア | "デフォルト" | キャッシュ領域 |
鍵 | 「」 | キャッシュキー |
状態 | 「」 | キャッシュ条件は Spring EL 式として渡す必要があります。 |
ない限り | 「」 | キャッシュ除外条件。Spring EL 式として渡す必要があります。 |
同期する | 間違い | 同期モードを使用するかどうか |
ソース利用可能 | 間違い | キャッシュ データ ソースが存在するかどうか |
キャッシュNull値 | 間違い | Null値をキャッシュするかどうか |
キャッシュ値 | 真実 | 戻り値をキャッシュするかどうか |
期限切れ | -1 | キャッシュの有効期限 (秒単位) |
期限切れ式 | 「」 | キャッシュの有効期限の式 |
キーコンバータ | 「」 | キャッシュキーコンバータ |
シリアルポリシー | 「」 | キャッシュ値のシリアル化戦略 |
エリアインキー | 間違い | キャッシュにはキャッシュ領域が含まれていますか |
地域内のエリア | 間違い | キャッシュ領域が独立しているかどうか、つまり、キャッシュ領域が異なるインスタンスを区別しているかどうか |
事後条件 | 「」 | キャッシュ事後条件 |
抑制例外 | 間違い | 例外を無視するかどうか |
ローカルリミット | -1 | ローカルキャッシュのサイズ制限 |
キャッシュタイプ | 「」 | キャッシュの種類 (カフェイン、Redis など)。 |
条件満足値 | 間違い | メソッドパラメータではなくキャッシュ値に基づいてキャッシュ条件を計算するかどうか |
3. クラスのアノテーションを開始します
@EnableMethodCache(basePackages = "")
4. サンプルコード
@Service
public class UserServiceImpl implements UserService {
@Autowired
private UserRepository userRepository;
@Cache(name = "userCache", key = "#userId", expire = 300)
@Override
public User getUserById(Long userId) {
return userRepository.getUserById(userId);
}
@CacheUpdate(name = "userCache", key = "#user.id")
@Override
public void updateUser(User user) {
userRepository.update(user);
}
@CacheInvalidate(name = "userCache", key = "#userId")
@Override
public void deleteUser(Long userId) {
userRepository.deleteUser(userId);
}
}
これは SpringCache に非常に似ていますが、@Cached アノテーションは TTL (タイムアウト時間) をネイティブにサポートしており、cacheType には 3 つのオプションがあります: LOCAL/REMOTE/BOTH (ローカル メモリ/リモート キャッシュ サーバー (Redis など)/2 レベルを表します)状況に応じて選択できるキャッシュ LOCAL または BOTH タイプを選択して合理的に使用すると、キャッシュ サーバーへの負荷と提供するサービスの応答時間を軽減できます。