จากความจริงที่ว่าฉันพบปัญหาต่าง ๆ ในช่วงเวลานี้ฉันคิดเกี่ยวกับการคัดออก บทความนี้ส่วนใหญ่แนะนำการบูรณาการของ Redis ในรูปแบบของคำอธิบายประกอบตาม Spring+Mybatis ไร้สาระน้อยลงไปถึงจุด
ก่อนอื่นเตรียม Redis ฉันจะใช้เวอร์ชัน Windows หลังจากดาวน์โหลดเพียงแค่เริ่ม Redis-Server โดยตรง ดูภาพด้านล่าง:
ก่อนอื่นเพิ่มแพ็คเกจ JAR ก่อน
2. สร้างคลาสเอนทิตี
แพ็คเกจ com.sl.user.vo; นำเข้า java.io.serializable; นำเข้า com.fasterxml.jackson.databind.propertynamingstrategy; นำเข้า com.fasterxml.jackson.databind.annotation.jsonnaming; @jsonnaming (PropertynamingStrategy.lowerCasewithundensCoressTrategy.class) คลาสสาธารณะ USERVO ใช้ serializable {ส่วนตัวคงที่สุดท้ายคงที่ความยาว SerialVersionUid = 1L; ID INT ส่วนตัว; ชื่อผู้ใช้สตริงส่วนตัว } public uservo (int id, ชื่อผู้ใช้สตริง, รหัสผ่านสตริง, อายุ int) {super (); this.id = id; this.username = ชื่อผู้ใช้; this.password = รหัสผ่าน; this.age = อายุ;} public int getid () {return id; ชื่อผู้ใช้) {this.userName = username;} สตริงสาธารณะ getPassword () {ส่งคืนรหัสผ่าน;} โมฆะสาธารณะ setpassword (รหัสผ่านสตริง) {this.password = รหัสผ่าน;} public int getage () {return age;} setage public void ชื่อผู้ใช้ = " + ชื่อผู้ใช้ +", รหัสผ่าน = " + รหัสผ่าน +", อายุ = " + อายุ +"] ";}} สามอินเตอร์เฟส DAO
แพ็คเกจ com.sl.user.dao; นำเข้า com.sl.user.vo.uservo; อินเทอร์เฟซสาธารณะ userdao {โมฆะสาธารณะ adduser (ผู้ใช้ USERVO); โมฆะสาธารณะ deleteuser (ผู้ใช้ USERVO); 4. USERMAPPER
<? xml version = "1.0" การเข้ารหัส = "utf-8"?> <! doctype mapper สาธารณะ "-// mybatis.org//dtd mapper 3.0 // en" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" namespace = "com.sl.user.dao.userdao"> <resultmap id = "userresult" type = "ผู้ใช้"> <result column = "id" คุณสมบัติ = "id"/> <column result = "userame" คุณสมบัติ = "userame"/> property = "age"/> <</resultmap> <แทรก id = "adduser" parameterType = "ผู้ใช้"> แทรกลงใน t_user (ชื่อผู้ใช้รหัสผ่านอายุ) ค่า (#{ชื่อผู้ใช้}#{รหัสผ่าน},#{อายุ}) #{id} </update> <update id = "updateUser" parameterType = "ผู้ใช้"> อัปเดต t_user set <ถ้า test = "ชื่อผู้ใช้! = null และชื่อผู้ใช้! = ''"> username = #{ชื่อผู้ใช้}, </if> <ถ้าทดสอบ = "รหัสผ่าน ! = '' "> age = #{อายุ} </if> โดยที่ 1 = 1 <ถ้า test =" id! = null และ id! = '' "> และ id = #{id} </if> </update> <select id =" getUser "ID =" int " parameterType = "int" resultType = "java.lang.string"> เลือกชื่อผู้ใช้จาก t_user โดยที่ id = #{id} </select> </mapper> 5. อินเทอร์เฟซบริการ
แพ็คเกจ com.sl.user.service; นำเข้า com.sl.user.vo.uservo; อินเตอร์เฟสสาธารณะผู้ใช้บริการ {public void adduser (ผู้ใช้ USERVO); โมฆะสาธารณะ deleteUser (ผู้ใช้ USERVO); Void UpdateUser สาธารณะ (ผู้ใช้ USERVO); หกการใช้บริการ
แพ็คเกจ com.sl.user.service.impl; นำเข้า org.springframework.beans.factory.annotation.autowired; นำเข้า org.springframework.cache.annotation.cacheevict; นำเข้า org.springframework.cache.annotation.cachevict; org.springframework.transaction.annotation.propagation; นำเข้า org.springframework.transaction.annotation.transactional; นำเข้า com.sl.user.dao.userdao; นำเข้า com.sl.user.service.userservice; com.sl.user.vo.uservo; @service ("ผู้ใช้")@transactional (การแพร่กระจาย = การแพร่กระจาย. required, rollbackfor = exception.class) ระดับสาธารณะ userserviceimpl ใช้ userservice {@autowiredprivate userdao userdao; AddUser (USERVO USER) {userDao.AddUser (ผู้ใช้);}@override@cacheeVict (value = {"getUser", "getUserById"}, allentries = true) void deleteuser (Uservo -user) {userdao.deleteuser "GetUserById"}, AllEntries = True) Public Void UpdateUser (ผู้ใช้ USERVO) {userDao.UpDateUser (ผู้ใช้);}@Override@cacheable (value = "user", key = "getUserById" userdao.getUserById (id);}@override@cacheable (value = "user", key = "'getUser'") public uservo getuser (ID int) {return userdao.getuser (id);}}}}}}} เซเว่นเลเยอร์ Ctrl
แพ็คเกจ com.sl.user.web; นำเข้า java.util.hashmap; นำเข้า java.util.map; นำเข้า org.springframework.beans.factory.annotation.autoWired; นำเข้า org.springframework.stereotype.controller; org.springframework.web.bind.annotation.responsebody; นำเข้า com.sl.user.service.userservice; นำเข้า com.sl.user.vo.uservo;@controller@requestmapping ("/userctrl") Adduser (Uservo User) {userservice.adduser (ผู้ใช้);}@requestmapping ("/deleteuser") โมฆะสาธารณะ deleteuser (ผู้ใช้ uservo) {userservice.deleteuser (ผู้ใช้);}@requestmapping ( ผู้ใช้) {userservice.updateUser (ผู้ใช้);}@responsebody@requestmapping ("/getUserById") แผนที่สาธารณะ <สตริง, วัตถุ> getUserById (USERVO USER) {แผนที่ <สตริง, วัตถุ> แผนที่ = ใหม่ hashMap <String, Object> (); map.put ("MSG", ผู้ใช้ แผนที่;}@responsebody@requestmapping ("/getUser") แผนที่สาธารณะ <สตริง, วัตถุ> getUser (uservo vo) {แผนที่ <สตริง, วัตถุ> แผนที่ = new hashmap <สตริง, วัตถุ> (); object user = userservice.getUser (4); map.put ("msg", user.tostring () 8. คลาสคีย์ Redis ใช้สำหรับการดำเนินการ CRUD
แพ็คเกจ com.sl.user.redis; นำเข้า java.io.bytearrayinputstream; นำเข้า Java.io.ByTeArrayOutputStream; นำเข้า java.io.ioException; นำเข้า Java.io.ObjectInputStream; นำเข้า Java.io.ObjectOutputStream; นำเข้า Java.io.ObjectOutputStream; นำเข้า org.springframework.cache.cache; นำเข้า org.springframework.cache.support.simplevaluewrapper; นำเข้า org.springframework.dao.dataaccessexception; นำเข้า org.springframework.data.redis.connection.redisconnection; นำเข้า org.springframework.data.redis.core.rediscallback; นำเข้า org.springframework.data.redis.core.redistemplate; Public Class Redisutil ใช้แคช {Private Redistemplate <String, Object> Redistemplate; ชื่อสตริงส่วนตัว; Public Redistemplate <String, Object> GetRedistemplate () {return redistemplate; } โมฆะสาธารณะ setredIstemplate (redistemplate <string, object> redistemplate) {this.redistemplate = redistemplate; } โมฆะสาธารณะ setName (ชื่อสตริง) {this.name = name; } @Override สตริงสาธารณะ getName () {return this.name; } @Override วัตถุสาธารณะ getNativeCache () {return this.redistemplate; } /*** รับคีย์จากแคช* /@override ValueWrapper รับ (คีย์วัตถุ) {System.out.println ("รับคีย์"); สตริงสุดท้าย keyf = key.toString (); วัตถุวัตถุ = null; Object = redistemplate.execute (ใหม่ rediscallback <Ojrop> () {วัตถุสาธารณะ doinredis (การเชื่อมต่อการเชื่อมต่อ redisconnection) โยน dataAccessException {byte [] key = keyf.getBytes (); byte [] value = connection.get (key); ถ้า value == null) {return null; return (object! = null? ใหม่ simplevaluewrapper ใหม่ (วัตถุ): null); } /*** บันทึกคีย์ใหม่ลงในแคช*ก่อนรับชื่อและวัตถุก่อนจากนั้นแปลงเป็น byteArray* /@การแทนที่โมฆะสาธารณะใส่ (คีย์วัตถุค่าวัตถุ) {system.out.println ("ใส่คีย์"); สตริงสุดท้าย keyf = key.toString (); ค่าวัตถุสุดท้าย = ค่า; LIVETIME สุดท้าย = 86400; redistemplate.execute (ใหม่ retiscallback <long> () {public long doinredis (การเชื่อมต่อการเชื่อมต่อ redisconnection) โยน dataAccessException {byte [] keyb = keyf.getBytes (); byte [] valueB = tobyTeArray (valuef); การเชื่อมต่อ - } ไบต์ส่วนตัว [] tobytearray (Object obj) {byte [] bytes = null; ByTeArrayOutputStream BOS = New ByTeArrayOutputStream (); ลอง {objectOutputStream oos = new ObjectOutputStream (BOS); oos.writeObject (obj); oos.flush (); Bytes = Bos.tobyteArray (); oos.close (); bos.close (); } catch (ioexception ex) {ex.printstacktrace (); } คืนไบต์; } วัตถุส่วนตัว toobject (byte [] bytes) {object obj = null; ลอง {byteArrayInputStream bis = new ByteArrayInputStream (ไบต์); ObjectInputStream OIS = ใหม่ ObjectInputStream (bis); obj = ois.readobject (); ois.close (); bis.close (); } catch (ioexception ex) {ex.printstacktrace (); } catch (classnotfoundexception ex) {ex.printstacktrace (); } return obj; } /*** ลบคีย์* /@การแทนที่โมฆะสาธารณะ evict (คีย์วัตถุ) {system.out.println ("del key"); สตริงสุดท้าย keyf = key.toString (); redistemplate.execute (ใหม่ rediscallback <lont> () {public long doinredis (การเชื่อมต่อ redisconnection) โยน dataAccessException {return connection.del (keyf.getBytes ());}}); } /*** Clear Key* /@Override Public Void Clear () {System.out.println ("Clear Key"); redistemplate.execute (ใหม่ rediscallback <string> () {สตริงสาธารณะ doinredis (การเชื่อมต่อการเชื่อมต่อ redisconnection) โยน dataaccessexception {connection.flushdb (); return "ตกลง";}}); } @Override สาธารณะ <t> t รับ (คีย์วัตถุคลาส <t> ประเภท) {return null; } @Override Public ValueWrapper Putifabsent (คีย์วัตถุค่าวัตถุ) {return null; - 9. สปริงรวมไฟล์การกำหนดค่า mybatis และ redis
<? xml version = "1.0" การเข้ารหัส = "utf-8"?> <beans xmlns = "http://www.springframework.org/schema/beans" xmlns: xsi = "http://ww.w3.org/2001/xml xmlns: p = "http://www.springframework.org/schema/p" xmlns: บริบท = "http://www.springframework.org/schema/context" xmlns: tx = "http://www.springframework.org/schema/tx" xmlns: mvc = "http://www.springframework.org/schema/mvc" xmlns: aop = "http:/ ork.org/schema/aop"xmlns:cache="http://www.springframework.org/schema/cache"xsi:schemalocation="http://www.springframework.org/schema/schema/schema/schema http://www.springframework.org/schema/beans/spring-beans-4.0.xsd http://www.springframework.org/schema/aop http://ww.springframework http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd http://www.springframework.org/schema/context/spring-context-4.0.xsdhttp://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsdhttp://www.springframework.org/schema/cache http://www.springframeworkwork/schema -> <บริบท: Component-Scan base-package = "com.sl.user.service" /> <บริบท: Component-scan base-package = "com.sl.user.service.*" /> <บริบท: Component-Scan base-package = "com.sl.user.user.uredis" /> <! คำอธิบายประกอบ-> <แคช: คำอธิบายประกอบที่ขับเคลื่อนด้วย/> <!-mybatis start-> <!-กำหนดค่า DataSource driverManagerDataSource-> <bean id = "dataSource"> <property name = "driverclassname" value = "com.mysql.jdbc.driver" value = "jdbc: mysql: //127.0.0.1: 3306/test"> </คุณสมบัติ> <ชื่อคุณสมบัติ = "ชื่อผู้ใช้" value = "root"> </คุณสมบัติ> <property name = "password" value = "root"> </property> ref = "dataSource"> </คุณสมบัติ> <property name = "configlocation" value = "classpath: config/mybatis.xml"> </คุณสมบัติ> <property name = "mapperlocations" value = "classpath: mapper/usermapper.xml"> </property> SQLSessionFactoryBasePackage: ระบุแพ็คเกจที่ไฟล์/อินเทอร์เฟซ SQL MAP อยู่ (สแกนอัตโนมัติ)-> <Bean> <property name = "SQLSessionFactory" REF = "SessionFactory"> </porement> dataSourceTransactionManager-> <bean id = "txManager"> <property name = "dataSource" ref = "DataSource"> </property> </ebean> <!-การใช้การทำธุรกรรม-ผู้จัดการการทำธุรกรรมที่กำหนดไว้ข้างต้น -> <!-กำหนดค่า Redis Part Start-> <!-กำหนดค่า Redis Connection Pool JedispoolConfig-> <bean id = "poolconfig"> <property name = "maxidle" value = "300" /> <property name = "maxtotal" name = "hostname" value = "127.0.0.1"> </property> <คุณสมบัติชื่อ = "พอร์ต" value = "6379"> </คุณสมบัติ> <property name = "poolconfig" ref = "poolconfig"> </property> </epean> <! ref = "connactory"/> </ebean> <bean id = "cachemanager"> <property name = "caches"> <et> <bean> <property name = "redistemplate" ref = "redistemplate"/> <property name = "name" value = "ผู้ใช้"/> <!
10, ไฟล์กำหนดค่า SpringMvc
<? xml version = "1.0" การเข้ารหัส = "utf-8"?> <beans xmlns = "http://www.springframework.org/schema/beans" xmlns: xsi = "http://ww.w3.org/2001/xml xmlns: p = "http://www.springframework.org/schema/p" xmlns: บริบท = "http://www.springframework.org/schema/tx" xmlns: mvc = "http://www.springframework.org/schema/mvc" xmlns: aop = "http://www.springframework.org/schema/aop. http://www.springframework.org/schema/beans/spring-beans-4.0.xsd http://www.springframework.org/schema/aop http://ww.springframework http://www.springframework.org/schema/aop/spring-aop-4.0.xsd http://www.springframework.org/schema/tx http://ww.springframework.org/schema/tx http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd http://www.springframework http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd"><mvc:annotation-driven/><!-เปิดใช้งานคำอธิบายประกอบ MVC ในฤดูใบไม้ผลิ base-package = "com.sl.user.*"> </บริบท: Component-scan> <!-ความละเอียดของชื่อมุมมองโมเดลนั่นคือการเพิ่มคำนำหน้าในชื่อมุมมองแบบจำลอง-> <bean id = "viewResolver"> <property name = "viewClass" value = "org.springframework. value = "/views/"/> <property name = "suffix" value = ". jsp"/> </ebean> <bean> <!-ตัวแปลง JSON-> <property name = "MessageConverters" name = "supportedediatypes"> <list> <value> แอปพลิเคชัน/json; charset = utf-8 </alue> <dent> text/json; charset = utf-8 </alues> </list> </porement> </ebean> </list>
11, ไฟล์กำหนดค่า mybatis
<? XML เวอร์ชัน = "1.0" การเข้ารหัส = "UTF-8"?> <! การกำหนดค่า doctype สาธารณะ "-// mybatis.org//dtd config 3.0 // en" "http://mybatis.org/dtd/mybatis-3-config.dtd"> นามแฝง-> <typealiases> <typealias alias = "user" type = "com.sl.user.vo.uservo"/> </ypealiases> </การกำหนดค่า>
12, log4j
# ตั้งค่าความสำคัญหมวดหมู่ของรูทเป็นข้อมูลและเฉพาะผู้เข้าร่วมคอนโซล. log4j.rootCategory = การดีบักคอนโซล# log4j.rootCategory = ข้อมูลคอนโซล logfile# คอนโซลถูกตั้งค่าให้เป็น consoleappender โดยใช้ A patternlayout.log4j.appender.console = org.apache.log4j.consoleappenderlog4j.appender.console.threshold = debuglog4j.a ppender.console.layout = org.apache.log4j.patternlayoutlog4j.appender.console.layout.conversionPattern =%d {yyyy-mm-dd hh/: mm/: ss} %p - %m %nlog4j.logger.java.sql.connection = debuglog4j.logger.java.sql.statement = debuglog4j.logger.java.sql.preprepreprepredStatement สิบสาม, web.xml
<? xml เวอร์ชัน = "1.0" การเข้ารหัส = "utf-8"?> <web-app version = "3.0" xmlns = "http://java.sun.com/xml/ns/javaee" xmlns: xsi = "http://ww.w3.org/200 XSI: schemalocation = "http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"><display-name>testredis</display-name><context-param> ame> <param-value> classpath: config/applicationcontext.xml </param-value> </context-param> <context-param> <param-name> log4jconfiglocation </param-name> <p aram-value> classpath: config/log4j.properties </param-value> </context-param> <context-param> <param-name> log4jrefreshinterval </param-name> <param-value > 60000 </param-value> </denterce-param> <ผู้ฟัง> <Sistener-Lass> org.springframework.web.context.contextloaderlistener </sisterer-lass> </sisterer> <!-! บันทึก-> <ผู้ฟัง> <Sistener-Lass> org.springframework.web.util.log4jconfiglistener </listener-class> </listener> <servlet> <servlet-na ฉัน> สปริง </servlet-name> <servlet-class> org.springframework.web.servlet.dispatcherservlet </servlet-class> <init-param> <param-name> contextConfigLocation </param-name> <param-value> classpath: config/springmvc.xml </param-value> </init-param> <load-on-startup> 1 </load-on-startup> </servlet> <servlet-mapping> ปัญหาของรหัสภาษาจีนที่อ่านไม่ออก -> <filter> <filter-name> ตัวละคร </filter-name> <tilter-class> org.springframework.web.filter.characterencodingfilter </filt Er-Class> <init-Param> <param-Name> การเข้ารหัส </param-name> <param-value> UTF-8 </param-value> </itiN-Param> <init-Param> <param-name> forceen การเข้ารหัส </param-name> <param-value> True </param-value> </itt-Param> </tilter> <Filter-Mapping> <silter-name> ตัวละคร </filter-name> < url-pattern>*. Do </url-pattern> </ตัวกรอง-การแมป> <welcome-file-list> <welcome-file> index.jsp </welcome-file> </welcome-file-list> </eb-app>
สิบสี่ทดสอบได้รับการสอบถามเป็นตัวอย่าง (วิธี getuser ()) หน้าทดสอบ JSP นั้นน่าเกลียดดังนั้นฉันจะไม่โพสต์เพียงแค่เขียนด้วยตัวเอง - -
ก่อนสอบถาม:
ดำเนินการค้นหาแรก:
ดำเนินการค้นหาครั้งที่สอง:
ดังที่เห็นได้ในรูปด้านบนจะไม่มีการดำเนินการ SQL อีกครั้งและข้อมูลจะได้รับโดยตรงจาก Redis
ข้างต้นเป็นวิธีการรวม REDIS ตามคำอธิบายประกอบโดยตัวแก้ไข ฉันหวังว่ามันจะเป็นประโยชน์กับทุกคน หากคุณมีคำถามใด ๆ โปรดฝากข้อความถึงฉันและบรรณาธิการจะตอบกลับทุกคนในเวลา ขอบคุณมากสำหรับการสนับสนุนเว็บไซต์ Wulin.com!