1, 利用 Spring-Data-Redis 整合
项目使用的 pom.xml:
<Project xmlns = "http://maven.apache.org/pom/4.0.0" xmlns: xsi = "http://www.w3.org/2001/xmlschema-instance" xsi: schemalocation = "http:/MANCMMMMMMMMMMMMMMMMMMMMMMMMMMBM http://maven.apache.org/xsd/maven-4.0.0.xsd "> <moderVersion> 4.0.0 </modelversion> <modyversion> </modelversion> <url> http://maven.apache.org </url> <properties> <project.build.sourceencoding> UTF-8 </project.build.sourceencoding> </properties> <pendencies> <ArtIfactId> Spring-Data-Redis </artifactid> <sersion> 1.0.2.Release </เวอร์ชัน> </การพึ่งพา> <การพึ่งพาอาศัย> <GroupId> org.springframework </groupid> <ratifactid> Spring-core </artifactid> <ArtIfactId> Jedis </artifactId> <persion> 2.1.0 </เวอร์ชั่น> </การพึ่งพา> <การพึ่งพา> <roupId> Junit </groupId> <ratifactid> junit </artifactid> <version> 4.8.2 </เวอร์ชัน> <pope> ทดสอบ </cope> <ArtIfactId> SLF4J-API </artifactid> <sersion> 1.6.1 </เวอร์ชัน> </การพึ่งพา> <!-将现有的จาการ์ต้าคอมมอนส์การบันทึก的调用转换成 lsf4j 的调用。-> <cendency> <ratrid> org.slf4j </groupid> </permentency> <!-แฮ็ค: 确保คอมมอนส์ล็อก的 jar 包不被引入, 否则将和 jcl-over-slf4j 冲突-> <การพึ่งพา> <GroupId> คอมมอนส์ล็อก </groupId> slf4j 的实现: logback, 用来取代 log4j 。更快、更强!-> <cendency> <roupid> ch.qos.logback </groupId> <ArtIfactId> logback-classic </artifactid> <version> 0.9.24 </เวอร์ชัน> <mope>
除了 log 部分, 只有一个 Spring Core 和 Spring-Data-Redis 了
项目文件目录结构:
ApplicationContext.xml:
1, บริบท: คุณสมบัติผู้ถือครองทรัพย์สิน标签用来导入คุณสมบัติ文件。从而替换 $ {redis.maxidle} 这样的变量。
2, บริบท: Component-Scan 是为了在 com.x.redis.dao 报下的类能够实用ฤดูใบไม้ผลิ的注解注入的方式。
3, 事实上我们只需要把 jedispoolconfig 配数来就好了, 接下来就是สปริง的封装了。所以直接看 userdaoimpl 的实现就明白了。
<? 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/contex xmlns: tx = "http://www.springframework.org/schema/tx" xmlns: aop = "http://www.springframework.org/schema/aop" xsi: schemalocation = "http:/ http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context location = "classpath: redis.properties" /> <บริบท: Component-scan base-package = "com.x.redis.dao"> < /บริบท: component-scan> <bean id = "poolconfig"> <property name = "maxidle" value = "$ {redis.maxidle}" <property name = "MaxWait" value = "$ {redis.maxwait}" /> <property name = "testonborrow" value = "$ {redis.testonborrow}" /> </epean> <bean id = "connectionFactory" p: host-name = "$ {redis.host}" port = " p: password = "$ {redis.pass}" p: pool-config-ref = "poolconfig"/> <bean id = "redistemplate"> <property name = "connectionFactory" ref = "connectionFactory" Redis.properties:
#การตั้งค่า redis#redis.host = 192.168.20.101#redis.port = 6380#redis.pass = foobaredredis.host = 127.0.0.1redis.port = 6379Redis.Pass = redis.maxidle = 300Redis.Maxactive = 600Redis
userdaoimpl:
1, ฤดูใบไม้ผลิ对 dao 层的封装很多用了类似于下面代码的模板方式。
2, redistemplate 就是สปริง对 redis 的一个封装而已。
คลาสสาธารณะ UserDaoimpl ใช้ UserDao {@AutoWired Redistemplate ที่ได้รับการป้องกัน <serializable, serializable> redistemplate; โมฆะสาธารณะ saveUser (ผู้ใช้ขั้นสุดท้าย) {redistemplate.execute (ใหม่ rediscallback <jobch> () {@Override วัตถุสาธารณะ doinredis (การเชื่อมต่อการเชื่อมต่อ redisconnection) พ่น dataAccessException {connection.set Redistemplate.getStringserializer (). serialize (user.getName ())); } @Override ผู้ใช้สาธารณะ getUser (ID ยาวสุดท้าย) {return redistemplate.execute (ใหม่ rediscallback <ผู้ใช้> () {@Override ผู้ใช้สาธารณะ doinredis (การเชื่อมต่อการเชื่อมต่อ redisconnection) พ่น dataAccessException {byte [] key = redistemplate.getStringserializer () ค่า = การเชื่อมต่อ (คีย์); -其他:
ผู้ใช้:
ผู้ใช้ระดับสาธารณะ {ID ส่วนตัวยาว; ชื่อสตริงส่วนตัว; Public Long getId () {return id; } โมฆะสาธารณะ setId (Long id) {this.id = id; } สตริงสาธารณะ getName () {ชื่อคืน; } โมฆะสาธารณะ setName (ชื่อสตริง) {this.name = name; -测试代码:
โมฆะสาธารณะคงที่หลัก (สตริง [] args) {applicationcontext ac = ใหม่ classpathxmlapplicationContext ("classpath: /applicationcontext.xml"); userdao userdao = (userdao) ac.getBean ("userdao"); ผู้ใช้ผู้ใช้ 1 = ผู้ใช้ใหม่ (); user1.setId (1); user1.setName ("Obama"); userdao.saveuser (user1); ผู้ใช้ USER2 = userDao.getUser (1); System.out.println (user2.getName ()); -2, 不利用 Spring-Data-Redis 整合
个人觉得这样整合灵活度更大, 能够更加明了的完成任务。
pom.xml:
<Project xmlns = "http://maven.apache.org/pom/4.0.0" xmlns: xsi = "http://www.w3.org/2001/xmlschema-instance" xsi: schemalocation = "http:/MANCMMMMMMMMMMMMMMMMMMMMMMMMMMBM http://maven.apache.org/xsd/maven-4.0.0.xsd "> <moderversion> 4.0.0 </modelversion> <moderversion> <moderversion> <name> redis_templete </name> <url> http://maven.apache.org </url> <properties> <project.build.sourceencoding> utf-8 </project.build.sourceencoding> <ArtIfactId> Junit </artifactid> <sersion> 3.8.1 </Scope> <Scope> ทดสอบ </cope> </การพึ่งพาอาศัย> <การพึ่งพาอาศัย> <roupId> redis.Clients </groupId> <ArtIfactId> Jedis </artifactid> <version> 2.1.0 </เวอร์ชัน> <ArtIfactId> Spring-Core </artifactId> <persion> 3.1.2.release </เวอร์ชัน> </การพึ่งพา> <การพึ่งพา> <GroupId> org.springframework </groupId> <ArtifactId> Spring-beans </artifactid> <version> 3.1.2.Release <ArtIfactId> Spring-Context </artifactId> <persion> 3.1.2.release </เวอร์ชั่น> </การพึ่งพา> <การพึ่งพา> <roupId> org.slf4j </roupid> <ratifactid> slf4j-api </artifactid> -> <cendency> <roupId> org.slf4j </groupId> <ratifactid> jcl-over-slf4j </artifactid> <persion> 1.6.1 </senture> </การพึ่งพา> <! <ArtIfactId> Commons-Logging </artifactId> <sersion> 1.1.1 </Scover> <Scope> ให้ </scope> </การพึ่งพา> <!-SLF4J 的实现: logback, 用来取代 log4j 。更快、更强!-> <derctiC <Scope> รันไทม์ </cope> </predency> </pendencies> </project>
目录结构:
data-source.xml
1, บริบท: ผู้ถือครองทรัพย์สิน和บริบท: Component-Scan 前面解释过啦。
2, 配置了一个 Shardedjedispool, 在 jdeis 里里里里里里里里里里里里里里里里里里里里里里
一个是分片形式, 可以连接有主备的 redis 服务端, 一个是单个的。详细后续学习
3, 因为不使用 Spring-Data-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/contex xmlns: tx = "http://www.springframework.org/schema/tx" xmlns: aop = "http://www.springframework.org/schema/aop" xsi: schemalocation = "http:/ http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context location = "classpath: redis.properties" /> <บริบท: Component-scan base-package = "com.d.work.main"> < /บริบท: Component-Scan> <บริบท: Component-Scan base-package = "com.dwork.redis"> < /บริบท name = "maxidle" value = "8"/> <property name = "maxWait" value = "1000"/> <property name = "testOnBorrow" value = "true"/> <property name = "testOnReturn" value = "true"/> <! <constructor-arg index = "0" ref = "jedispoolconfig" /> <constructor-arg index = "1"> <list> <bean> <constructor-arg name = "host" value = "$ {redis.host}" /> value = "$ {redis.timeout}"/> <constructor-arg name = "weight" value = "1"/> </ebean> </list> </constructor-Arg> </ebean> </ebeans>Redisdatasource: 定义三个方法
อินเทอร์เฟซสาธารณะ redisdatasource {สาธารณะนามธรรม Shardedjedis getSclient (); โมฆะสาธารณะ Returnresource (Shardedjedis Shardedjedis); โมฆะสาธารณะ Returnresource (Shardedjedis Shardedjedis, บูลีนหัก);}实现 Redisdatasource:
1, 注入配置好的 Shardedjedispool,::
@Repository ("RedisDatasource") คลาสสาธารณะ REDISDATASOURCEIMPL ใช้ REDISDATASOURCE {LOGGER สุดท้าย Logger สุดท้าย = loggerFactory.getLogger (redisDataSourceimpl.class); @autowired Private Shardedjedispool Shardedjedispool; Public ShardedJedis GetRedisclient () {ลอง {ShardedJedis Shardjedis = ShardedJedispool.getResource (); คืน Shardjedis; } catch (exception e) {log.error ("ข้อผิดพลาด getredisclent", e); } return null; } โมฆะสาธารณะ returnresource (Shardedjedis Shardedjedis) {Shardedjedispool.returnresource (ShardedJedis); } โมฆะสาธารณะ returnresource (ShardedJedis Shardedjedis, บูลีนหัก) {ถ้า (หัก) {Shardedjedispool.returnbrokenresource (Shardedjedis); } else {ShardedJedispool.returnResource (ShardedJedis); -:: redisclienttemplate, 例子实现了放值和取值。最后代码提供了全部命令的实现。
代码就是映射性质的又一次调用 Jedis 的方法而已, 用了个用了个用了个来做标示符, 决定返还资源的方式。决定返还资源的方式。
这一层的目的主要也是让再上层的调用不需要关心พูล中链接的取得和返还问题了。
@Repository ("RedisclientTemplate") คลาสสาธารณะ REDISClientTemplate {logger สุดท้ายคงที่ logger log = loggerFactory.getLogger (redisclientTemplate.class); @autowired ส่วนตัว Redisdatasource Redisdatasource; โมฆะสาธารณะยกเลิกการเชื่อมต่อ () {ShardedJedis ShardedJedis = redisdatasource.getredisclient (); Shardedjedis.disconnect (); } / ** * 设置单个值 * * @param คีย์ * @param value * @return * / ชุดสตริงสาธารณะ (คีย์สตริง, ค่าสตริง) {สตริงผลลัพธ์ = null; ShardedJedis ShardedJedis = redisdatasource.getredisclient (); if (ShardedJedis == null) {ผลตอบแทน; } บูลีนเสีย = เท็จ; ลอง {result = chardedjedis.set (คีย์, ค่า); } catch (exception e) {log.error (e.getMessage (), e); เสีย = จริง; } ในที่สุด {redisdatasource.returnresource (Shardedjedis, Broken); } ผลตอบแทนผลลัพธ์; } / ** * 获取单个值 * * คีย์ @param * @return * / สตริงสาธารณะรับ (คีย์สตริง) {สตริงผลลัพธ์ = null; ShardedJedis ShardedJedis = redisdatasource.getredisclient (); if (ShardedJedis == null) {ผลตอบแทน; } บูลีนเสีย = เท็จ; ลอง {result = chardedjedis.get (คีย์); } catch (exception e) {log.error (e.getMessage (), e); เสีย = จริง; } ในที่สุด {redisdatasource.returnresource (Shardedjedis, Broken); } ผลตอบแทนผลลัพธ์; -测试代码:
โมฆะคงที่สาธารณะหลัก (สตริง [] args) {applicationcontext ac = ใหม่ classpathxmlapplicationContext ("classpath: /data-source.xml"); RedisclientTemplate redisclient = (redisclientTemplate) ac.getBean ("RedisclientTemplate"); redisclient.set ("A", "ABC"); System.out.println (redisclient.get ("a")); -附上 redisclienttemplate 全部实现:
RedisclientTemplate 代码太多,: http: //xiazai.vevb.com/201701/yuanma/redisclientTemplate_jb51.rar
以上就是本文的全部内容, 希望对大家的学习有所帮助, 也希望大家多多支持武林网。