通常の開発では、辞書を使用することがよくあります。たとえば、デバイスコードをデータベースに保存し、デバイス名を表示します。データベースに保存されるのはユーザーIDであり、ユーザー名が表示されます。このようなフィールドを頻繁に呼び出してから、データベースに頻繁にクエリを実行します。アクセス速度を確保するために、キャッシュを使用します。しかし、Redisのようなミドルウェアキャッシングを使用する場合、それは少しやり過ぎです。もちろん、必要なデータを自分でマップに保存することもできますが、マップの推定容量、データキャッシュの時間などを考慮する必要があります。そのため、マップのデザインはより面倒です。
ここでは、GoogleのライブラリフレームワークであるGuavaのローカルキャッシュをお勧めします。
使用する前に、まずGuavaのMaven依存関係を引用します。
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>18.0</version>
</dependency>
まず、州都のエンティティクラスを作成しましょうProvince
。
@Data
@ToString
@AllArgsConstructor
@NoArgsConstructor
public class Province {
//省会名称
private String name;
//省会编码 如:PR001
private String code;
}
ここでは、州都の名前と州都のコードの2つのフィールドが定義されています。通常、コードはインベントリに保存されcode
ます。表示するときは、特別なテーブルでクエリを実行して取得する必要がありますname
。
キャッシュ無効化のリスナーを定義しましょうCustomizeRemovalListener
:
public class CustomizeRemovalListener implements RemovalListener<String, Province> {
@Override
public void onRemoval(RemovalNotification<String, Province> removalNotification) {
String reason = String.format("key=%s,value=%s,reason=%s", removalNotification.getKey(), removalNotification.getValue(), removalNotification.getCause());
System.out.println(reason);
}
}
キャッシュを手動で無効にするか、有効期限が切れると、キャッシュが監視されます。コンソールが印刷されreason
ます。onRemoval()
メソッドは、ビジネスニーズに応じて作成できます。
キャッシュを使用しましょう:
上記のコードのように、loadingCache.get()
メソッドを呼び出すときは、最初にキャッシュで検索します。キャッシュにない場合は、次のコードを実行します。
// 如果找不到元素,会调用这里
@Override
public Province load(String s) {
//实际情况这里就是查库
System.out.println("查了数据库哦");
return getDataFromDb();
}
このコードでライブラリを確認してみましょう。示されているコードでは、最初に初期キャッシュを作成します。
LoadingCache<String, Province> loadingCache = CacheBuilder.newBuilder()
.maximumSize(1000) // 容量
.expireAfterWrite(3, TimeUnit.SECONDS) // 过期时间
.removalListener(new CustomizeRemovalListener()) // 失效监听器
.build(cacheLoader);
キャッシュの初期容量、有効期限、およびキャッシュの有効期限が切れた後の監視機能がここに作成されます。
データをキャッシュに保存します。
loadingCache.put("PR001", getDataFromDb());
最初の3回のフェッチは、すべてキャッシュからのloadingCache
値のフェッチです。スレッドが4秒間スリープし、有効期限を超えると、キャッシュが無効になり、リスナーがトリガーされます。4日は入場から入りload(String s)
ます。
コンソールの印刷結果は次のとおりです。
第一次获取:Province(name=北京, code=PR001)
第二次获取:Province(name=北京, code=PR001)
第三次获取:Province(name=北京, code=PR001)
key=PR001,value=Province(name=北京, code=PR001),reason=EXPIRED
查了数据库哦
第四次获取:Province(name=北京, code=PR001)
このコード
key=PR001,value=Province(name=北京, code=PR001),reason=EXPIRED
タイムアウトが原因でディスプレイキャッシュの有効期限が切れました。
もちろん、グアバにはまだたくさんの機能があります。子供靴に興味があるなら、私が書いたこの記事を読んでください:
「「[プログラマーの福音-グアバ](プログラマーの福音-グアバ(qq.com))
」
もちろん、Caffeine(Guavaキャッシュのアップグレードバージョン)、Ehcacheなど、世界中に多くのローカルキャッシュフレームワークがあります。興味のある子供靴は、それについて学びに行くことができます。
過去におすすめ
QRコードをスキャンして、よりエキサイティングになります。または、WeChatでLvshen_9を検索すると、返信してバックグラウンドで情報を取得できます
回复"java" 获取java电子书;
回复"python"获取python电子书;
回复"算法"获取算法电子书;
回复"大数据"获取大数据电子书;
回复"spring"获取SpringBoot的学习视频。
回复"面试"获取一线大厂面试资料
回复"进阶之路"获取Java进阶之路的思维导图
回复"手册"获取阿里巴巴Java开发手册(嵩山终极版)
回复"总结"获取Java后端面试经验总结PDF版
回复"Redis"获取Redis命令手册,和Redis专项面试习题(PDF)
回复"并发导图"获取Java并发编程思维导图(xmind终极版)
もう1つ:[マイベネフィット]をクリックして、さらに驚きを持ってください。