Teknologi caching digunakan secara meluas dalam pembangunan harian, dan terdapat pelbagai pelaksanaan cache dalam Java. Antaranya, pembaca cache dan penulis adalah teknologi caching yang penting Artikel ini akan memperkenalkan pembaca cache dan penulis dalam Java secara terperinci.
1. Apakah itu pembaca dan penulis cache?
Pembaca dan penulis cache ialah antara muka yang disediakan untuk menyokong tingkah laku cache tertentu semasa menyimpan objek dalam cache. Pembaca dan penulis cache menyediakan kaedah untuk membaca data daripada cache dan kaedah untuk menulis data ke cache. Pembaca dan penulis cache memastikan ketekalan cache dan menyediakan antara muka cache biasa yang membolehkan pembangun menyesuaikan strategi cache mereka sendiri.
Pembaca dan penulis cache di Java menggunakan corak yang dipanggil CacheWriter dan CacheLoader. CacheWriter menyediakan kaedah untuk menulis data ke cache, manakala CacheLoader menyediakan kaedah untuk membaca data daripada cache.
2. Antara muka CacheWriter
Antara muka CacheWriter ialah antara muka yang digunakan untuk menulis data ke cache. Ia mengandungi kaedah tulis yang menerima objek CacheEntry sebagai parameter. Objek CacheEntry mewakili data yang akan ditulis ke cache. Berikut ialah kod contoh untuk antara muka CacheWriter:
public interface CacheWriter<K,V> { void write(Cache.Entry<? extends K, ? extends V> entry) throws CacheWriterException; }
CacheWriter mengandungi jenis generik K dan V, yang mewakili jenis kunci dan nilai cache. Kaedah tulis menerima objek Cache.Entry sebagai parameter, menunjukkan bahawa data dalam cache akan ditulis. Cache.Entry mengandungi kunci cache dan nilai cache, dan menyediakan kaedah untuk mendapatkan dan menetapkan nilainya.
Apabila menulis ke cache, antara muka CacheWriter menyediakan kaedah berikut:
Tulis satu entri cache: tulis(Cache.Entry)
Tulis berbilang entri: writeAll( Koleksib9ac79e846fe9bd623a8ab6e8d0823b5>)
Padam entri cache: delete(Objek)
Padam berbilang entri: deleteAll(Collection> ; )
Perlu diingatkan bahawa kaedah penulisan CacheWriter adalah segerak, jadi ia dapat memastikan ketekalan data.
3. Antara muka CacheLoader
Antara muka CacheLoader ialah antara muka yang digunakan untuk membaca data daripada cache. Ia mengandungi kaedah beban yang menerima kunci cache sebagai parameter dan mengembalikan nilai cache. Berikut ialah kod sampel untuk antara muka CacheLoader:
public interface CacheLoader<K,V> { V load(K key) throws CacheLoaderException; }
CacheLoader mengandungi jenis generik K dan V, yang mewakili jenis kunci dan nilai cache. Kaedah beban menerima kunci cache sebagai parameter dan mengembalikan nilai cache. Jika nilai yang dicache tidak dijumpai, kaedah beban harus mengembalikan nol.
Secara umumnya, CacheLoader digunakan untuk mengisi cache secara automatik. Apabila nilai yang sepadan dengan kunci tidak ditemui dalam cache, cache akan memanggil kaedah pemuatan CacheLoader untuk memuatkan data secara automatik daripada sumber data latar belakang (seperti pangkalan data, sistem fail, dll.) dan menyimpan data dalam cache.
4. Contoh CacheWriter dan CacheLoader
Berikut adalah contoh kod untuk CacheWriter dan CacheLoader. Di sini kami menggunakan cache ringkas berdasarkan ConcurrentHashMap:
import java.util.Map; import javax.cache.Cache.Entry; import javax.cache.integration.CacheLoader; import javax.cache.integration.CacheLoaderException; import javax.cache.integration.CacheWriter; import javax.cache.integration.CacheWriterException; public class SimpleCache<K, V> implements CacheWriter<K, V>, CacheLoader<K, V> { private Map<K, V> cache = new ConcurrentHashMap<>(); @Override public void delete(Object o) throws CacheWriterException { cache.remove(o); } @Override public void deleteAll(Collection<?> collection) throws CacheWriterException { for(Object o : collection) { delete(o); } } @Override public void write(Entry<? extends K, ? extends V> entry) throws CacheWriterException { cache.put(entry.getKey(), entry.getValue()); } @Override public void writeAll(Collection<? extends Entry<? extends K, ? extends V>> collection) throws CacheWriterException { for(Entry<? extends K, ? extends V> entry : collection) { write(entry); } } @Override public V load(K k) throws CacheLoaderException { return cache.get(k); } @Override public Map<K, V> loadAll(Iterable<? extends K> iterable) throws CacheLoaderException { throw new UnsupportedOperationException("Not implemented"); } @Override public void loadCache(IgniteBiInClosure<K, V> biInClosure, Object... objects) throws CacheLoaderException { throw new UnsupportedOperationException("Not implemented"); } }
Dalam contoh ini, kami menggunakan ConcurrentHashMap untuk melaksanakan cache berasaskan memori. Melaksanakan antara muka CacheWriter dan CacheLoader, dan melaksanakan kaedah tulis dan muat yang sepadan. Apabila kunci tidak wujud dalam cache, kaedah pemuatan akan mengembalikan null, dan cache akan memanggil kaedah pemuatan CacheLoader untuk memuatkan data daripada sumber data latar belakang.
5. Ringkasan
Pembaca dan penulis cache ialah bahagian penting dalam teknologi caching Java. Ia menyediakan antara muka caching yang boleh disesuaikan yang membolehkan pembangun menyesuaikan strategi caching mereka sendiri. Di Java, CacheWriter dan CacheLoader merupakan salah satu kaedah pelaksanaan pembaca dan penulis cache Dengan melaksanakannya, fungsi pengisian cache secara automatik dapat direalisasikan dalam aplikasi.
Atas ialah kandungan terperinci Pembaca dan penulis cache dalam teknologi caching Java. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!