查看: 247|回复: 0

[Java学习] redis与spring整合使用的步骤实例教程

发表于 2018-4-15 08:00:01

前言

做过大型软件系统的同学都知道,随着系统数据越来越庞大,越来越复杂,随之带来的问题就是系统性能越来越差,尤其是频繁操作数据库带来的性能损耗更为严重。很多业绩大牛为此提出了众多的解决方案和开发了很多框架以优化这种频繁操作数据库所带来的性能损耗,其中,尤为突出的两个缓存服务器是Memcached和Redis。今天,我们不讲Memcached和Redis本身,这里主要为大家介绍Spring与Redis整合使用的相关内容,下面话不多说了,来一起看看详细的介绍吧。

方法如下

第一步,在项目中加入redis的pom代码:

  1. <dependency>
  2. <groupId>redis.clients</groupId>
  3. <artifactId>jedis</artifactId>
  4. <version>2.6.0</version>
  5. </dependency>
复制代码

第二步,spring中加载redis配置文件:applicationContext-redis.xml,内容如下

  1. <bean id="poolConfig" class="redis.clients.jedis.JedisPoolConfig">
  2. <property name="maxTotal" value="${redis.maxTotal}" />
  3. </bean>
  4. <bean class="redis.clients.jedis.ShardedJedisPool">
  5. <constructor-arg index="0" ref="poolConfig" />
  6. <constructor-arg index="1">
  7. <list>
  8. <bean class="redis.clients.jedis.JedisShardInfo">
  9. <constructor-arg index="0" value="${redis.node1.host}" />
  10. <constructor-arg index="1" value="${redis.node1.port}" />
  11. </bean>
  12. </list>
  13. </constructor-arg>
  14. </bean>
  15. </beans>
复制代码

第三步,编写连接redis服务端的属性文件:redis.properties

  1. redis.maxTotal=100
  2. redis.node1.host=127.0.0.1
  3. redis.node1.port=6379
复制代码

第四步,编写redis的相关操作方法类,Function类和RedisService类:

Funcrion类:

  1. package xx.service;
  2. /**
  3. * 为了抽取相同的操作代码
  4. * @author yeying
  5. *<p>Description:</p>
  6. *<p>Company:</p>
  7. * @date:2017年12月5日 下午9:02:44
  8. */
  9. public interface Function<T,E> {
  10. public T callback(E e);
  11. }
复制代码

RedisService类:

  1. package com.taotao.common.service;
  2. import org.springframework.beans.factory.annotation.Autowired;
  3. import org.springframework.stereotype.Service;
  4. import redis.clients.jedis.ShardedJedis;
  5. import redis.clients.jedis.ShardedJedisPool;
  6. /**
  7. * redis的相关操作
  8. * @author yeying
  9. *<p>Description:</p>
  10. *<p>Company:</p>
  11. * @date:2017年12月3日 下午2:11:47
  12. */
  13. @Service
  14. public class RedisService {
  15. @Autowired(required=false) //需要再注入进去
  16. private ShardedJedisPool shardedJedisPool;
  17. private <T> T execute(Function<T, ShardedJedis> fun){
  18. ShardedJedis shardedJedis = null;
  19. try {
  20. // 从连接池中获取到jedis分片对象
  21. shardedJedis = shardedJedisPool.getResource();
  22. // 从redis中获取数据
  23. return fun.callback(shardedJedis);
  24. } catch (Exception e) {
  25. e.printStackTrace();
  26. } finally {
  27. if (null != shardedJedis) {
  28. // 关闭,检测连接是否有效,有效则放回到连接池中,无效则重置状态
  29. shardedJedis.close();
  30. }
  31. }
  32. return null;
  33. }
  34. /**
  35. * 执行set操作
  36. * @param key
  37. * @param value
  38. * @return
  39. */
  40. public String set(final String key,final String value){
  41. return this.execute(new Function<String, ShardedJedis>() {
  42. @Override
  43. public String callback(ShardedJedis e) {
  44. return e.set(key, value);
  45. }
  46. });
  47. }
  48. /**
  49. * 执行set操作,并设置生存时间,单位为秒
  50. * @param key
  51. * @param value
  52. * @param seconds
  53. * @return
  54. */
  55. public String set(final String key,final String value,final Integer seconds){
  56. return this.execute(new Function<String, ShardedJedis>() {
  57. @Override
  58. public String callback(ShardedJedis e) {
  59. String str =e.set(key, value);
  60. e.expire(key, seconds);
  61. return str;
  62. }
  63. });
  64. }
  65. /**
  66. * 执行get操作
  67. * @param key
  68. * @return
  69. */
  70. public String get(final String key){
  71. return this.execute(new Function<String, ShardedJedis>() {
  72. @Override
  73. public String callback(ShardedJedis e) {
  74. return e.get(key);
  75. }
  76. });
  77. }
  78. /**
  79. * 执行set操作
  80. * @param key
  81. * @return
  82. */
  83. public Long del(final String key){
  84. return this.execute(new Function<Long, ShardedJedis>() {
  85. @Override
  86. public Long callback(ShardedJedis e) {
  87. return e.del(key);
  88. }
  89. });
  90. }
  91. /**
  92. * 设置生存时间,单位为秒
  93. * @param key
  94. * @param seconds
  95. * @return
  96. */
  97. public Long expire(final String key, final Integer seconds) {
  98. return this.execute(new Function<Long, ShardedJedis>() {
  99. @Override
  100. public Long callback(ShardedJedis e) {
  101. return e.expire(key, seconds);
  102. }
  103. });
  104. }
  105. }
复制代码

第五步,启动redis服务,redis-server.exe,双击打开:

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对程序员之家的支持。



回复

使用道具 举报