Caching dapat dikatakan sebagai cara yang sangat efektif dan sederhana untuk mempercepat respons layanan. Di bidang caching, ada banyak kerangka kerja terkenal, seperti Ehcache, jambu, hazelcast, dll. Sebagai basis data nilai kunci, Redis juga telah menjadi alat caching data yang populer karena fiturnya.
Dengan cara tradisional, kode pemrosesan cache sangat kembung.
Misalnya: kita perlu menambahkan fungsi kueri ke fungsi cache, yang membutuhkan sekitar tiga langkah.
1. Sebelum fungsi dijalankan, kita perlu memeriksa apakah ada data dalam cache. Jika ada, kembalikan data yang di -cache.
2. Jika tidak ada, itu perlu ditanya dalam data database.
3. Akhirnya, simpan data di cache. Ketika fungsi ini dipanggil lain kali, Anda dapat menggunakan data yang di -cache secara langsung untuk mengurangi tekanan pada database.
Jadi berapa banyak kode yang diperlukan untuk mengimplementasikan tiga langkah di atas? Inilah contohnya:
Bagian merah dalam gambar di atas adalah semua kode template, tetapi kode yang benar -benar terkait dengan fungsi ini hanya menyumbang 1/5. Untuk semua fungsi yang perlu menerapkan fungsi cache, diperlukan kode template yang membengkak. Ini adalah solusi yang sangat tidak masuk akal.
Jadi bagaimana kita bisa mengembalikan kode yang membengkak ke waktu paling segar?
Bukankah AOP solusi terbaik untuk kode gaya template ini? Untungnya, kita tidak perlu lagi mengimplementasikan bagian sendiri. Springcache telah memberi kami bagian yang baik. Kita hanya perlu membuat konfigurasi sederhana untuk kembali ke yang asli, seperti yang berikut:
Anda hanya perlu menambahkan anotasi. Anda bahkan tidak perlu mengubah kode asli. Apakah Anda ingin mencobanya?
Hanya ada tiga langkah untuk mengonfigurasi SpringCache:
Langkah 1: Tambahkan dependensi yang relevan:
<dependency> <GroupId> redis.clients </groupid> <ArtifactId> jedis </arttifactid> <version> 2.9.0 </version> </dependency> <sependency> <groupid> org.springframework.data </groupid> <Artifactid> Spring-Data-redis </artifacency </groupid> <Artifactid> Spring-Data-redis </Artifacence.data </groupid> <Artifactid> Spring-Data-redis </artifacency </version.6 <.6 version. <groupId> org.apache.Commons </groupId> <ArTifactId> commons-lang3 </artifactid> <version> 3.3.2 </version> </dependency>
Langkah 2: Mengkonfigurasi SpringCache, Koneksi Redis dan Informasi Lainnya
ApplicationContext-Redis.xml
<? XML Versi = "1.0" encoding = "utf-8"?> <beans xmlns = "http://www.springframework.org/schema/beans" xmlns: xsi = "http://www.w3.org/2001/xmls xmlns: p = "http://www.springframework.org/schema/p" xmlns: context = "http://www.springframework.org/schema/mvc" xmlns: cache = "http:/schema/mvc" xmlns: cache = "http:/such.sach.sache XSI: schemalocation = "http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-weans-4.2.xsd http:/wwww.springframework.orgaMory http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.2.xsd http://www.springframework.org/schema/www.springframework.org/schema http://www.springframework.org/schema/cache http://www.springframework.org/schema/cache/spring-cache-4.2.xsd "> <!-pemuatan file konfigurasi-> <Context: Properti-Place-Place Lokasi =" ClassPath:* cache-manager="cacheManager"/> <!-- redis connection pool--> <bean id="poolConfig"> <property name="maxIdle" value="${redis.maxIdle}" /> <property name="maxWaitMillis" value="${redis.maxWait}" /> <property name="testOnBorrow" value = "$ {redis.testonborrow}"/> </ bean> <!-connection factory-> <bean id = "jedisconnectionfactory" p: host-name = "$ {redis.host}" p: port = "$ {redis.port}" p: password = "$ {redis.pass. Templat redis-> <bean id = "redistemplate"> <name properti = "connectionFactory" ref = "jedaconconnectionFactory" /> </ bean> <bean id = "cacheManager"> <name properti = "cache"> <set> <! name = "name" value = "content"/> <!-Nama yang sesuai dengan nama harus digunakan dalam anotasi kelas atau metode-> </tean> </tion> </propert> </tac> </tean>Redis.Properties File:
# Pengaturan Redis # Server IP Redis.host = 192.168.100.55 # Port Server Redis.port = 6379 # Server Pass Redis.pass = # Gunakan dbindex redis.database = 0 #Max Idel instance dari jedisredis.maxidle = 300 tunggu terlalu lama, lemparan Jedisconceptexcepionx. instance jedis, apa yang Anda dapatkan sebagai instance adalah semua berguna.testonborrow = true
Langkah ketiga adalah menulis kelas implementasi antarmuka cache
Spring hanya menyediakan antarmuka abstrak untuk cache, dan fungsi panggilan melalui antarmuka. Tidak ada kelas implementasi khusus, jadi kami perlu mengimplementasikan operasi tertentu sendiri.
Dalam konfigurasi di atas, kita dapat melihat bahwa setiap kelas implementasi akan menyuntikkan instance redistemplate, dan kami dapat mengoperasikan redis melalui redistemplate
Paket com.cky.rest.utils; impor java.io.serializable; impor org.apache.commons.lang3.serializationutils; impor org.springframework.cache. org.springframework.data.redis.connection.redisconnection; impor org.springframework.data.redis.core.rediscallback; impor org.springframework.data.redis.core.core. nama string pribadi; @Override public void clear () {System.out.println ("---------------"); redistemplate.execute (Rediscallback baru <string> () {@Override Public String doInredis (Redisconnection Connection) melempar DataAccessException {connection.flushdb (); return "OK";}}); } @Override public void eVict (kunci objek) {System.out.println ("-----------------"); string final keyf = key.toString (); redistemplate.execute (Rediscallback baru <long> () {@Override public long doinredis (redisconnection connection) melempar DataAccessException {return connection.del (keyf.getbytes ());}}); } @Override public valuewrapper get (tombol objek) {System.out.println ("-----------------------"+key.toString ()); string final keyf = key.toString (); Objek objek = null; Object = redistemplate.execute (rediscallback baru <Papen> () {@Override Objek publik doinredis (koneksi redisconnection) melempar datacessException {byte [] key = keyf.getbytes (); byte [] value = connection.get (key); if (value == null) {System.out.out.print = connection (key); if (value == null) {System.out.out.te Serializationutils.deserialize (nilai);}}); Valuewrapper obj = (objek! = Null? New SimpleValueWrapper (objek): null); System.out.println ("-------------------------------------"+obj); kembalikan obj; } @Override public void put (tombol objek, nilai objek) {System.out.println ("-----------------------"); System.out.println ("Kunci ----:"+Key); System.out.println ("Kunci ----:"+nilai); final string keystring = key.toString (); nilai objek akhir = nilai; Final Long Livetime = 86400; redistemplate.execute (rediscallback baru <long> () {@override public long doinredis (koneksi redisconnection) melempar dataAccessException {byte [] keyb = keyString.getBytes (); byte [] valueB = serialisasi) (nilai lializable) (nilai lializable) (nilai) (nilai lializable. Connection.Expire (KeyB, LiveTime);} Return 1L; } @Override public <t> t get (objek arg0, class <t> arg1) {// TODO Metode yang dihasilkan secara otomatis Stub return null; } @Override public string getName () {return this.name; } @Override objek publik getNativeCache () {return this.redistemplate; } @Override public valuewrapper putifabsent (objek arg0, objek arg1) {// todo metode yang dihasilkan otomatis rintisan kembali null; } public redistemplate <String, Object> getReDistemplate () {return redistemplate; } public void setredistemplate (redistemplate <String, Object> redistemplate) {this.redistemplate = redistemplate; } public void setName (name string) {this.name = name; }}Ada dua kesalahan selama proses konfigurasi:
1.xxxx.classNotFoundException Akhirnya, saya menemukan bahwa unduhan JAR tidak lengkap. Cukup hapus folder Paket JAR yang sesuai dari repositori lokal Maven dan unduh lagi.
2.xxxx.methodnotfoundException Situasi ini adalah versi yang salah, cukup ubah ke versi pada langkah pertama.
Penggunaan Anotasi Umum di Springcache:
@Anotasi yang dapat dipenuhi
Anotasi yang paling umum digunakan akan menyimpan nilai pengembalian metode beranotasi. Cara kerjanya adalah: Pertama -tama lihat di cache, jika tidak ada metode yang dijalankan dan hasilnya di -cache, dan kemudian data dikembalikan. Nama cache dari anotasi ini harus ditentukan dan sesuai dengan nilai nama cache di cache di Cachemanager. Dapat ditentukan menggunakan nilai atau cacheName.
Jika tidak ada atribut kunci yang ditentukan, Spring akan menggunakan generator kunci utama default untuk menghasilkan kunci primer. Anda juga dapat menyesuaikan kunci utama, dan ekspresi SPEL dapat digunakan di kunci. sebagai berikut:
@Cacheable (cachenames = "content", key = "#user.userid") pengguna publik getUser (pengguna pengguna) {xxxxx}Anda dapat menggunakan atribut kondisi untuk menambahkan kondisi ke cache, sebagai berikut:
@Cacheable (cachenames = "content", key = "#user.userid", condition = "#user.age <40") pengguna publik getUser (pengguna pengguna) {xxxxx}@Cacheput anotasi
Jalankan metode terlebih dahulu, dan kemudian masukkan nilai pengembalian ke dalam cache. Dapat digunakan sebagai pembaruan yang di -cache.
@Cacheevict anotasi
Anotasi ini bertanggung jawab untuk menghapus data secara eksplisit dari cache. Biasanya, data yang di -cache memiliki tanggal kedaluwarsa dan data juga akan dihapus saat kedaluwarsa.
Anotasi ini memiliki dua atribut tambahan:
Apakah allentries menghapus semua entri cache.
Sebelum Invokasi: Selesaikan operasi penghapusan sebelum atau setelah metode dipanggil. Benar/Salah
Di atas adalah semua konten artikel ini. Saya berharap ini akan membantu untuk pembelajaran semua orang dan saya harap semua orang akan lebih mendukung wulin.com.