Penelitian utama dalam artikel ini adalah tentang konten terkait cache musim semi, sebagai berikut.
Artikel ini secara kasar dimodifikasi berdasarkan terjemahan Google. Karena saya tidak tahu apa teks aslinya, itu dapat menyebabkan kesalahan dan ketidakakuratan dalam terjemahan, tetapi arah umum terasa cukup baik, jadi saya mengurutkannya di sini, berharap ini akan membantu.
Caching selalu menjadi kebutuhan besar bagi keduanya untuk meningkatkan kinerja aplikasi dan mengurangi beban kerjanya. Selain itu, kegunaannya sangat jelas hari ini, yang dapat digunakan untuk menangani ribuan pengunjung pada arsitektur aplikasi web yang bersamaan. Mulai dari versi 3.1, Spring menyediakan API manajemen cache, mirip dengan manajemen transaksi deklaratif. Antarmuka abstrak cache, menggunakan solusi cache yang berbeda dengan cara yang disatukan, memiliki dampak paling sedikit pada kode.
Spring menggunakan metode Java untuk meminta metode untuk pertama kalinya untuk kombinasi dengan parameter, dan Spring menyimpan nilai pengembalian dalam cache. Oleh karena itu, permintaan berikutnya adalah menggunakan nilai dari cache secara langsung tanpa harus memanggil metode yang mungkin mahal. Semuanya diterapkan secara transparan tanpa mempengaruhi metode yang disebut.
Dalam posting ini, kita akan melihat implementasi dua penyimpanan cache yang berbeda dari Spring.
Integrasi pegas dan cache sederhana dan transparan. Metode yang membutuhkan cache dijelaskan oleh anotasi @cacheable
@Cacheable (value = "DataCache") Public Reconse getDatas (Param1 Long, String Param2) {} Datacache adalah nama cache yang terkait. Ketika metode ini dipanggil untuk pertama kalinya, metode ini mengeksekusi dan menyimpan hasil eksekusi dalam hasil yang ditetapkan dengan kunci rahasia hash dari <parameter 1 dan parameter 2> sebagai hasilnya. Ketika parameter yang sama dipanggil lagi, metode ini tidak perlu dieksekusi lagi.
Ada kemungkinan bahwa lebih dari satu cache dikaitkan dengan metode kami
@Cacheable ({"DataCache", "Default"}) Public Reponse getDatas (Param1 Long, String Param2) {} Dalam hal ini, setiap cache diperiksa sebelum metode dieksekusi, dan jika ada hit, nilai yang relevan akan dikembalikan.
Proporsi algoritma dasar manajer cache relatif kecil. Cache dapat dianggap sebagai area memori di mana objek yang disimpan dipetakan oleh kunci unik. Proses pencarian objek adalah sebagai berikut:
1. Hitung kunci (gunakan metode hash untuk mendapatkan kode hash)
2. Temukan objek berdasarkan nilai kunci
3. Jika objek ditemukan, kembalikan hasilnya
4. Jika tidak dapat ditemukan, kunci yang sebenarnya terkait dengan objek akan dihitung dan objek akan disimpan di lokasi yang sesuai.
Spring menggunakan hash sederhana, yang menghasilkan kunci berdasarkan parameter metode yang diteruskan.
Metode target tidak bisa hanya menghasilkan kunci yang tidak perlu berdasarkan parameter, tetapi hanya beberapa kasus sederhana yang dihasilkan berdasarkan parameter.
@Cacheable (value = "DataCache") Public Reconse getDatas (Param1 Long, String Param2, Boolean Param3) {}@Cacheable memungkinkan pengembang untuk menentukan cara pembuatan kunci dihasilkan sendiri. Anda dapat menggunakan ekspresi SPEL untuk melakukan ini.
@Cacheable (value = "DataCache", key = "#param2") Public Reponse getDatas (Long Param1, String Param2, Boolean Param3) {} Dalam hal ini di atas, parameter kunci yang di -cache hanya parma2
Musim semi juga memungkinkan properti bersarang
@Cacheable (value = "DataCache", key =#param2.name ") Public Reponse getDatas (Param1 Long, Data Param2, Boolean Param3) {} Situasi ini adalah kunci yang dihitung berdasarkan atribut nama parma2
Ada cache yang mungkin tidak cocok untuk cache dalam kasus yang digunakan, tetapi dalam beberapa kasus, diperlukan cache. Ketika di -cache, cache diproses berdasarkan yang benar atau salah dihitung oleh ekspresi SPEL, dan jika kondisinya benar, cache dilakukan.
@Cacheable (value = "DataCache", key = "#param2", condition = "#param2.length <64") Public Revonse getDatas (Long Param1, String Param2, Boolean Param3) {} Dalam hal ini, cache hanya akan dilakukan jika panjang parameter kedua kurang dari 64
Cache Spring tidak hanya dapat cache data tetapi juga menghapus penyimpanan cache. Proses ini digunakan untuk menghapus data yang sudah ketinggalan zaman atau data cache yang tidak digunakan. Anotasi @Cacheevict mendefinisikan metode untuk melakukan empigasi cache, ini adalah pemicu untuk menghapus data dalam cache.
@Cacheevict (value = "DataCache") public void reloadData () {}Opsi ini sangat diperlukan, dan metode ini akan digunakan ketika data yang di -cache perlu dibersihkan.
Untuk mengaktifkan dukungan cache untuk proyek Spring, kita perlu menambahkan komentar cache ke namespace.
<beans xmlns = "http://www.springframework.org/schema/beans" xmlns: cache = "http://www.springframework.org/schema/cache" xmlns: xsi = "http:/schema.cache. xmlns: context = "http://www.springframework.org/schema/context" xsi: schemalocation = "http://www.springframework.org/schema/beans http://wwww.springframework http://www.springframework.org/schema/cache http://www.springframework.org/schema/cache http://www.springframework.org/schema/cache/spring-cache.xsd http://www.springframework.org/schema/context "> <cache: annotation-driven/>
Hapus anotasi dapat menonaktifkan cache, atau mengaktifkan penggunaan cache di kelas konfigurasi kami
@Configuration @enablecaching kelas publik appconfig {} Keterbatasan Teknis
Parameter metode Object Pass harus memiliki metode kode hash mereka sendiri untuk menghitung kunci rahasia.
Sebagai objek yang dilewati dan dikembalikan sebagai parameter, itu harus diserializable
Menerapkan seleksi
Spring menyediakan dua implementasi dasar:
Saat menggunakannya, Anda hanya perlu mendeklarasikan Cachemanger dan Entitas Manajer yang sesuai
Concurrenthashmap menggunakan java
<bean id="cacheManager"> <span style="white-space:pre"> </span><property name="caches"> <span style="white-space:pre"> </span><set> <span style="white-space:pre"> </span><bean name="default"/> <span style="white-space:pre"> </span></property> </bean>
Setiap palungan membutuhkan nama, yang dikenali oleh komentar. Seseorang dapat mengelola beberapa orang sederhana dengan palungan, dan implementasi ini pada dasarnya tidak perlu.
Mengimplementasikan ehcache
Pernyataan Cachemanger
bean id = "cacheManager"> <name properti = "cacheManager" ref = "ehcache"/> </ bean> <bean id = "ehcache"> <name properti = "configlocation" value = "classpath: ehcache.xml"/> <nama properti = "shared" value = "true"/</bean>
Dalam file ehcache.xml adalah file parameter cache aplikasi:
<ehcache xsi: nonamespacesChemalocation = "ehcache.xsd" updateCheck = "true" monitoring = "autodetect" dynamicconfig = "true" maxbyteslocalheap = "150m"> <diskstore path = "java.io.tmpdire/<150m" <DISKSTORE = "java.io.tmpdir" "" "" "" EDRACHECE = "java.io.tmpdire/<150m" overflowToDisk="false"/> <cache name="dataCache" eternal="false" timeToIdleSeconds="300" maxBytesLocalHeap="30M" timeToLiveSeconds="300" overflowToDisk="true" diskPersistent="false" diskExpiryThreadIntervalSeconds="120" MemoryStoreEvictionPolicy = "lru"/> </shcache>
Menggunakan ehcache, kita dapat mendefinisikan beberapa cache parameter berbeda dengan cara yang sangat sederhana
Nama: Pengidentifikasi cache
MAXBYTESLOCALHEAP: Menentukan jumlah byte yang dapat digunakan cache untuk mesin virtual. Jika Cachemanager Maxbyteslocalheap telah ditetapkan, ukuran cache yang ditentukan akan dikurangi oleh Cachemanager. Cache lainnya bersama istirahat bersama. Nilai properti ini adalah data <number> k | K | M | M | G | G adalah singkatan dari Kilobytes (K | K), Megabytes (M | M) atau Gigabytes (G | G).
Keabadian: mendefinisikan apakah suatu elemen abadi. Jika ini masalahnya, batas waktu akan diabaikan dan proyek tidak pernah kedaluwarsa.
TimeToidleseconds: Ini adalah jumlah detik, item telah ditinggalkan dalam pemanfaatan terakhir. Nilai default LA adalah 0, dan elemen tetap diam
TimeToliveseconds: Ini adalah jumlah detik yang telah dijalani proyek di cache.la penciptaan nilai default adalah 0, dan proyek akan hidup selamanya.
Kebijakan Penjarahan MemoryStoreEvictionPolicy: LRU - Baru -baru ini, baru -baru ini digunakan, jarang digunakan FIFO - First -in, elemen tertua berdasarkan tanggal penciptaan.
DISKEXPIRYTHREADIVALCONDS: Proses penyitaan mengontrol jumlah detik antara dua kali.
Diskpersistent: Memungkinkan objek dipulihkan antara dua pertandingan mesin virtual yang disimpan di disk.
OverflowTodisk: Menentukan apakah suatu objek dapat disimpan pada disk untuk mencapai elemen penyimpanan maksimum.
Untuk meringkasnya, gunakan rumus matematika sederhana: expirationTime = Math.min((creationTime + timeToLive),(mostRecentTime + timeToIdle))
Di atas adalah semua penjelasan terperinci tentang kode cache musim semi dalam artikel ini, saya harap ini akan membantu semua orang. Teman yang tertarik dapat terus merujuk ke topik terkait lainnya di situs ini. Jika ada kekurangan, silakan tinggalkan pesan untuk menunjukkannya. Terima kasih teman atas dukungan Anda untuk situs ini!