Integrasi ssm+redis
Kerangka kerja SSM telah dibangun sebelumnya, jadi tidak ada kode penyalinan yang dilakukan di sini.
Di sini kami terutama menggunakan Redis untuk membuat cache sekunder Mybatis. Semua pilih dalam file pemetaan mybaits akan menyegarkan cache yang ada. Jika tidak ada, cache baru akan dibuat. Semua operasi memasukkan dan memperbarui akan memperbarui cache.
Manfaat REDIS juga jelas, yang dapat membuat kinerja akses data sistem lebih tinggi. Bagian ini hanya menunjukkan metode dan efek integrasi, dan akan dilengkapi dengan artikel yang berbagi kelompok Redis, penyeimbangan beban dan sesi.
Mari kita mulai pekerjaan integrasi:
Backend dimulai lebih dulu (metode memulai dan menghubungkan dari jarak jauh ke layanan Linux membutuhkan mengubah file redis.conf), dan memulai perintah "./src/redis-server ./redis.conf"
Saya mengembangkannya di bawah sistem Windows. Saya merekomendasikan alat visual "Redis Desktop Manager". Dibutuhkan koneksi jarak jauh ke Redis di Linux, dan port perlu dibuka untuk publik di bawah Linux (metode spesifik adalah untuk memodifikasi file/etc/sysconfig/ptables dan menambahkan perintah pengembangan port eksternal).
Setelah semua operasi di atas selesai, koneksi jarak jauh akan berhasil, seperti yang ditunjukkan pada gambar:
Belum ada catatan cache. Mari masukkan tahap kode. Pertama, tambahkan paket JAR Redis yang diperlukan ke pom.xml.
<dependency> <GroupId> redis.clients </groupid> <ArTifactId> jedis </artifactid> <version> 2.9.0 </version> </dependency> <dependency> <groupid> org.springframework.data </proupid> <Artifactid> Spring-Data-redis </Artence.data </groupid> <ArTifacTid> Spring-Data-redis </Artency <groupId> org.mybatis </groupid> <ArtifactId> mybatis-ehcache </arttifactid> <version> 1.0.0 </version> </dependency> <!-Tambahkan paket koneksi druid-> <groupid> Com.alibaba </groupid> <Arttifactid> <Artency> Versi/Versi/Versi </ARTIF </ARTICID </versi/versi </versi </versi </versi </grupid </versi </versi </versi </versi </versi </versi </grupid>
Setelah pom.xml ditulis, dua file konfigurasi baru perlu ditambahkan: redis.properties
redis.host = 192.168.0.109redis.port = 6379redis.pass = 123456redis.maxidle = 200redis.maxactive = 1024redis.maxwait = 10000redis.testonborrow = true
Bidang juga mudah dimengerti, dan kemudian tambahkan file konfigurasi: spring-bedis.xml
<beans xmlns = "http://www.springframework.org/schema/beans" xmlns: xsi = "http://www.w3.org/2001/xmlschema-instance" xmlns: p = "http:/xmlschema" xmlns: p = "http:/xmlschema" xmlns: p = "http:/xmlschema" xmlns: p = "http:/xmlschema" xmlns: p = "http: xmlns: mvc = "http://www.springframework.org/schema/mvc" xmlns: util = "http://www.springframework.org/schema/util" xmlns: AOP = "http:or/schema" xmlns: AOP = "http:ory/schema" xmlns: context = "http://www.springframework.org/schema/context" xmlns: Task = "http://www.springframework.org/schema/task" xsi: schemalocation = "http:/schema http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.3.xsd http://www.springframework.org/schema/schema http://www.springframework.org/schema/mvc/spring-mvc-4.3.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop: http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd "> <!-Konfigurasi Parameter Dasar Koleksi, Mirip dengan Database Connection Pool-> <> Konteks: Konteks: Konteks Parameter: PARAMETER PARAMETER, MUDAH KONTEKSI DATEKSPASI,> <! <bean id = "poolconfig"> <name properti = "maxtotal" value = "$ {redis.maxactive}"/> <name properti = "maxidle" value = "$ {redis.maxidle}"/<nama properti = "testonborrow" value = "$ {redis.testonborrow}" <bean id="jedisConnectionFactory" > <property name="hostName" value="${redis.host}"></property> <property name="port" value="${redis.port}"></property> <property name="password" value="${redis.pass}"></property> <property name="poolConfig" ref="poolConfig"></property> </bean> <!-Call Connection Pool Factory Configuration-> <!-<bean id = "redistemplate"> <name properti = "jedaconnectionFactory" ref = "jedisconnectionFactory"> </propert> Jika serializer tidak dikonfigurasi, kemudian menggunakan string dengan cerdas saat disimpan. Jika Anda menggunakan jenis pengguna untuk disimpan, itu akan meminta pengguna kesalahan tidak dapat dilemparkan ke String! Lai Lai <property name="keySerializer"> <bean /> </property> <property name="valueSerializer"> <bean /> </property> </bean> --> <bean id="redisCacheTransfer"> <property name="jedisConnectionFactory" ref="jedisConnectionFactory" /> </bean></beans>Setelah file konfigurasi ditulis, mulailah menulis kode Java:
Jedisclusterfactory.java
Paket com.cjl.util; impor java.util.hashset; impor java.util.properties; import java.util.set; org.springframework.beans.factory.initializingBean; impor org.springframework.core.io.Resource; impor redis.clients.jedis.hostandport; impor redis.jedis.jediscluster; JediscleSeSclusterfactory; Private String AddressKeyPrefix; Jediscluster Private Jediscluster; batas waktu bilangan bulat pribadi; Integer Private Integer MaxRedirections; private genericObjectPoolConfig genericObjectPoolConfig; Private Pattern P = Pattern.Compile ("^.+[:] // D {1,5} // S*$"); jediscluster publik getObject () melempar Exception {return jediscluster; } kelas publik <? Extends JedisCluster> getObjectType () {return (this.jediscluster! = null? this.jediscluster.getClass (): jediscluster.class); } public boolean issingleton () {return true; } set private <HostAndport> parsehostandport () melempar Exception {try {properties prop = new properties (); prop.load (this.addressconfig.getInputStream ()); Set <shostandport> hasps = hashset baru <HostAndport> (); untuk (tombol objek: prop.keyset ()) {if (! ((string) key) .startswith (addresskeyprefix)) {lanjutan; } String val = (string) prop.get (key); boolean isIpport = p.matcher (val) .matches (); if (! ISIPPORT) {lempar IllegalArgumentException baru ("IP atau port adalah ilegal"); } String [] ipandport = val.split (":"); Hostandport hap = hostandport baru (ipandport [0], integer.parseint (ipandport [1])); haps.add (hap); } return hasps; } catch (ilegalargumentException ex) {throw ex; } catch (exception ex) {throw new Exception ("Parse Jedis Configuration File Gagal", ex); }} public void afterpropertiesset () melempar Exception {set <HostAndport> hasps = this.parsehostandport (); jediscluster = new jediscluster (haps, timeout, maxredirections, genericObjectPoolConfig); } public void setaddressConfig (sumber daya alamatconfig) {this.addressConfig = addressConfig; } public void setTimeout (int timeout) {this.timeout = timeout; } public void setmaxredirections (int maxredirections) {this.maxredirections = maxredirections; } public void setaddressKeyPrefix (string addressKeyPrefix) {this.addressKeyPrefix = addressKeyPrefix; } public void setGenericObjectPoolConfig (genericObjectPoolConfig genericObjectPoolConfig) {this.genericObjectPoolConfig = genericObjectPoolConfig; }}REDISCACHE.java
Paket com.cjl.util; impor java.util.concurrent.locks.readwritelock; import java.util.concurrent.locks.reentrantreadwritelock; import org.apache.ibatis.cache.cache; impor org.slf4j.logger; impor.ibatis.cache.cache; org.slf4j.logger; impor.batis.cache.cache; org.slf4j.logger; impor.sache.cache org.springframework.data.redis.connection.jedis.jedisconnection; impor org.springframework.data.redis.connection.jedis.jedisconnectionfactory; impor org.springframework.data.redis.serializer.jdkkserizalizer org.springframework.data.redis.serializer.redisserializer; impor redis.clients.jedis.exceptions.jEdisconnectionException; kelas publik Rediscache mengimplementasikan cache {private static final logger = loggerFactory.getLogger (rediscAche.class); jedisconnectionfactory jedisconnectionfactory pribadi; ID string final pribadi; Private Final ReadWritelock RWL = baru reentrantreadwritelock (); rediscache publik (ID string akhir) {if (id == null) {throw new IllegalArgumentException ("Cache Instances memerlukan ID"); } logger.debug ("mybatisrediscache: id =" + id); this.id = id; } / *** Hapus semua cache* / public void clear () {rwl.readlock (). Lock (); Koneksi Jedisconnection = NULL; coba {connection = jEdisconnectionFactory.getConnection (); connection.flushdb (); connection.flushall (); } catch (jEdisconnectionException e) {e.printstacktrace (); } akhirnya {if (koneksi! = null) {connection.close (); } rwl.readlock (). buka kunci (); }} public String getId () {return this.id; } / *** Dapatkan jumlah total cache* / int int getSize () {int result = 0; Koneksi Jedisconnection = NULL; coba {connection = jEdisconnectionFactory.getConnection (); hasil = integer.valueof (connection.dbSize (). ToString ()); Logger.info ("Tambahkan Nomor cache sekunder MyBaits:" + hasil); } catch (jEdisconnectionException e) {e.printstacktrace (); } akhirnya {if (koneksi! = null) {connection.close (); }} hasil pengembalian; } public void putObject (kunci objek, nilai objek) {rwl.writelock (). lock (); Koneksi Jedisconnection = NULL; coba {connection = jEdisconnectionFactory.getConnection (); RedisSerializer <BOMPERTS> Serializer = JDKSerializationRedisSerializer baru (); connection.set (serializeutil.serialize (kunci), serializeutil.serialize (nilai)); Logger.info ("Tambahkan Kunci cache sekunder mybaits =" + key + ", value =" + value); } catch (jEdisconnectionException e) {e.printstacktrace (); } akhirnya {if (koneksi! = null) {connection.close (); } rwl.writelock (). unlock (); }} objek publik getObject (tombol objek) {// Dapatkan data dari cache terlebih dahulu, tambahkan kunci baca rwl.readlock (). lock (); Hasil Objek = NULL; Koneksi Jedisconnection = NULL; coba {connection = jEdisconnectionFactory.getConnection (); RedisSerializer <BOMPERTS> Serializer = JDKSerializationRedisSerializer baru (); result = serializer.deserialize (connection.get (serializer.serialize (key))); logger.info ("Hit MyBaits Level 2 Cache, value =" + hasil); } catch (jEdisconnectionException e) {e.printstacktrace (); } akhirnya {if (koneksi! = null) {connection.close (); } rwl.readlock (). buka kunci (); } hasil pengembalian; } objek publik RemestObject (tombol objek) {rwl.writelock (). lock (); Koneksi Jedisconnection = NULL; Hasil Objek = NULL; coba {connection = jEdisconnectionFactory.getConnection (); RedisSerializer <BOMPERTS> Serializer = JDKSerializationRedisSerializer baru (); result = connection.Expire (serializer.serialize (key), 0); } catch (jEdisconnectionException e) {e.printstacktrace (); } akhirnya {if (koneksi! = null) {connection.close (); } rwl.writelock (). unlock (); } hasil pengembalian; } public static void setJEdisconnectionFactory (jedisconnectionFactory jedisconnectionFactory) {recRiscache.jEdisconnectionFactory = jedisconnectionFactory; } public readwritelock getReadWritelock () {// TODO Metode yang dihasilkan secara otomatis rintisan rwl; }}Rediscachetransfer.java
package com.cjl.util;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.data.redis.connection.jedis.JedisConnectionFactory;/** * Static injection of intermediate classes*/public class RedisCacheTransfer { @Autowired public void setjEdisconnectionFactory (jedisconnectionFactory jedisconnectionFactory) {rediscache.setjEdisconnectionFactory (jedisconnectionFactory); }}Serializeutil.java
Paket com.cjl.util; impor java.io.bytearrayinputStream; impor java.io.bytearrayoutputstream; impor java.io.objectInputStream; import java.ializezeize {** ** ** ** ** ** ** @Author cjl */class public class public Class Public Class objek) {ObjectOutputStream oos = null; BytearrayoutputStream baos = null; coba {// serialisasi baos = new bytearrayoutputStream (); OOS = ObjectOutputStream baru (BAOS); oos.writeObject (objek); byte [] bytes = Baos.tobyteArray (); Byte kembali; } catch (Exception e) {E.PrintStackTrace (); } return null; } / ***Deserialization* / Objek statis publik Unserialize (byte [] bytes) {if (bytes! = Null) {bytearrayInputStream bais = null; coba {// deserialize bais = new bytearrayInputStream (bytes); ObjectInputStream OIS = ObjectInputStream baru (BAIS); return ois.readObject (); } catch (Exception e) {}} return null; }}Setelah semuanya siap, Anda perlu memodifikasi file pemetaan
Untuk membuat cache mybaits efektif, Anda juga perlu mengaktifkan cache sekunder seperti yang ditunjukkan pada gambar di atas. File konfigurasi juga perlu dimuat di web.xml agar berlaku
Saat semuanya siap, mulailah layanan
Setelah startup berhasil, mengklik formulir karyawan dapat memicu metode untuk meminta semua karyawan. Ketika pernyataan kueri dilakukan untuk pertama kalinya, Anda dapat melihat bahwa mybatis telah mencetak pernyataan kueri dan memperbarui cache di server Redis.
Kami menghapus konsol dan mengklik tombol KURITY PEKERJAAN UNTUK MENGAMBIL METODE KURUTI. Kita dapat melihat bahwa tidak ada pernyataan kueri yang dieksekusi, membuktikan bahwa kueri kedua secara langsung mengambil nilai dari cache, dan tidak ada koneksi ke MySQL untuk kueri.
Meringkaskan
Di atas adalah metode integrasi Redis dan SSM (cache Level 2 MyBatis) yang diperkenalkan kepada Anda oleh editor. Saya harap ini akan membantu semua orang. Jika Anda memiliki pertanyaan, silakan tinggalkan saya pesan dan editor akan membalas semua orang tepat waktu. Terima kasih banyak atas dukungan Anda ke situs web Wulin.com!