Pengenalan kepada Guava CacheLoader

1. Pengenalan

Dalam artikel ini, kami akan memperkenalkan Guava CacheLoader.

Sebelum membaca lebih lanjut, disarankan agar ada pemahaman asas mengenai kelas LoadingCache terlebih dahulu. Ini kerana CacheLoader berfungsi dengannya secara khusus.

Pada dasarnya, CacheLoader adalah fungsi yang digunakan untuk mengira nilai sekiranya tidak dijumpai di Guava LoadingCache.

2. Menggunakan CacheLoader Dengan LoadingCache

Bila ada cache miss dengan LoadingCache, atau cache perlu disegarkan, CacheLoader akan digunakan untuk menghitung nilai. Ini membantu merangkumi logik cache kami di satu tempat, menjadikan kod kami lebih padat.

2.1. Ketergantungan Maven

Pertama, mari tambah ketergantungan Maven kami:

 com.google.guava guava 29.0-jre 

Anda boleh mendapatkan versi terbaru di repositori Maven.

2.2. Nilai Pengkomputeran dan Caching

Sekarang, mari kita lihat bagaimana kita dapat mewujudkan LoadingCache dengan CacheLoader :

LoadingCache loadingCache = CacheBuilder.newBuilder() .build(new CacheLoader() { @Override public String load(final String s) throws Exception { return slowMethod(s); } });

Pada dasarnya, LoadingCache akan memanggil CacheLoader sebaris kami setiap kali ia perlu mengira nilai yang belum di-cache. Mari cuba kirakan berapa kali kaedah slowMode () dipanggil ketika kita mengambil sesuatu dari cache berkali-kali:

String value = loadingCache.get("key"); value = loadingCache.get("key"); assertThat(callCount).isEqualTo(1); assertThat(value).isEqualTo("expectedValue"); 

Seperti yang kita lihat, ia hanya dipanggil sekali Kali pertama nilai tidak disimpan kerana belum dikira. Kali kedua, ia dilakukan dari panggilan sebelumnya, sehingga kami dapat menghindari overhead untuk memanggil slowMethod kami () lagi.

2.3. Menyegarkan Cache

Masalah lain yang biasa dilakukan dengan cache adalah menyegarkan cache. Walaupun aspek yang paling sukar adalah mengetahui kapan untuk menyegarkan cache, yang lain adalah mengetahui caranya.

Menyelesaikan caranya mudah ketika menggunakan CacheLoader. The LoadingCache hanya akan kematian itu bagi setiap nilai mana perlu segar. Mari cuba dengan ujian:

String value = loadingCache.get("key"); loadingCache.refresh("key"); assertThat(callCount).isEqualTo(2); assertThat(value).isEqualTo("key");

Tidak seperti panggilan seterusnya untuk mendapatkan (), refresh () akan memaksa CacheLoader dipanggil lagi, memastikan nilai kami terkini.

3. Kesimpulannya

Dalam artikel ini, kami telah menjelaskan bagaimana LoadingCache digunakan oleh CacheLoader untuk menghitung nilai pada cache yang hilang, dan juga pada cache refresh. Anda juga mesti melihat artikel yang lebih mendalam mengenai Guava Caching ini.

Pelaksanaan contoh-contoh ini boleh didapati di GitHub. Ini adalah projek Maven, jadi semestinya mudah dijalankan seperti sedia kala.