redis与spring整合使用的步骤实例教程

 更新时间:2018年03月12日 10:10:02   作者:侠客夜莺  
这篇文章主要给大家介绍了关于redis与spring整合使用的相关资料,文中通过示例代码将实现的步骤一步步介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。

前言

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

方法如下

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

<dependency>
 <groupId>redis.clients</groupId>
 <artifactId>jedis</artifactId>
 <version>2.6.0</version>
 </dependency>

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

<bean id="poolConfig" class="redis.clients.jedis.JedisPoolConfig">
 <property name="maxTotal" value="${redis.maxTotal}" />
</bean>
 
 <bean class="redis.clients.jedis.ShardedJedisPool">
 <constructor-arg index="0" ref="poolConfig" />
 <constructor-arg index="1">
  <list>
  <bean class="redis.clients.jedis.JedisShardInfo">
   <constructor-arg index="0" value="${redis.node1.host}" />
   <constructor-arg index="1" value="${redis.node1.port}" />
  </bean>
  </list>
 </constructor-arg>
 </bean>
</beans>

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

redis.maxTotal=100
redis.node1.host=127.0.0.1
redis.node1.port=6379

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

Funcrion类:

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

RedisService类:

package com.taotao.common.service;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import redis.clients.jedis.ShardedJedis;
import redis.clients.jedis.ShardedJedisPool;

/**
 * redis的相关操作
 * @author yeying
 *<p>Description:</p>
 *<p>Company:</p>
 * @date:2017年12月3日 下午2:11:47
 */
@Service
public class RedisService {

 @Autowired(required=false) //需要再注入进去
 private ShardedJedisPool shardedJedisPool;

 private <T> T execute(Function<T, ShardedJedis> fun){
 ShardedJedis shardedJedis = null;
 try {
  // 从连接池中获取到jedis分片对象
  shardedJedis = shardedJedisPool.getResource();
  // 从redis中获取数据
  return fun.callback(shardedJedis);
 } catch (Exception e) {
  e.printStackTrace();
 } finally {
  if (null != shardedJedis) {
  // 关闭,检测连接是否有效,有效则放回到连接池中,无效则重置状态
  shardedJedis.close();
  }
 }
 return null;
 }

 /**
 * 执行set操作
 * @param key
 * @param value
 * @return
 */
 public String set(final String key,final String value){
 return this.execute(new Function<String, ShardedJedis>() {
  @Override
  public String callback(ShardedJedis e) {
  return e.set(key, value);
  }
 });
 }

 /**
 * 执行set操作,并设置生存时间,单位为秒
 * @param key
 * @param value
 * @param seconds
 * @return
 */
 public String set(final String key,final String value,final Integer seconds){
 return this.execute(new Function<String, ShardedJedis>() {
  @Override
  public String callback(ShardedJedis e) {
  String str =e.set(key, value);
  e.expire(key, seconds);
  return str;
  }
 });
 }

 /**
 * 执行get操作
 * @param key
 * @return
 */
 public String get(final String key){
 return this.execute(new Function<String, ShardedJedis>() {
  @Override
  public String callback(ShardedJedis e) {
  return e.get(key);
  }
 });
 }

 /**
 * 执行set操作
 * @param key
 * @return
 */
 public Long del(final String key){
 return this.execute(new Function<Long, ShardedJedis>() {
  @Override
  public Long callback(ShardedJedis e) {
  return e.del(key);
  }
 });
 }

 /**
 * 设置生存时间,单位为秒
 * @param key
 * @param seconds
 * @return
 */
 public Long expire(final String key, final Integer seconds) {
 return this.execute(new Function<Long, ShardedJedis>() {
  @Override
  public Long callback(ShardedJedis e) {
  return e.expire(key, seconds);
  }
 });
 }
}

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

总结

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

相关文章

  • scala 隐式转换与隐式参数的使用方法

    scala 隐式转换与隐式参数的使用方法

    这篇文章主要介绍了scala 隐式转换与隐式参数的使用方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-11-11
  • 有关Java常见的误解小结(来看一看)

    有关Java常见的误解小结(来看一看)

    下面小编就为大家带来一篇有关Java常见的误解小结(来看一看)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-05-05
  • 详解Springboot整合ActiveMQ(Queue和Topic两种模式)

    详解Springboot整合ActiveMQ(Queue和Topic两种模式)

    这篇文章主要介绍了详解Springboot整合ActiveMQ(Queue和Topic两种模式),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-04-04
  • 探索Java分布式限流技术

    探索Java分布式限流技术

    探索Java分布式限流技术,让你的系统远离流量过载的烦恼,本指南将带你了解如何使用Java实现高效的限流策略,帮助你轻松应对高并发场景,让我们一起开启这段精彩的技术之旅,打造更加稳定可靠的系统,需要的朋友可以参考下
    2024-03-03
  • springboot中RestTemplate配置HttpClient连接池详解

    springboot中RestTemplate配置HttpClient连接池详解

    这篇文章主要介绍了springboot中RestTemplate配置HttpClient连接池详解,这些Http连接工具,使用起来都比较复杂,如果项目中使用的是Spring框架,可以使用Spring自带的RestTemplate来进行Http连接请求,需要的朋友可以参考下
    2023-11-11
  • MyBatis分页插件PageHelper的使用与原理

    MyBatis分页插件PageHelper的使用与原理

    提到插件相信大家都知道,插件的存在主要是用来改变或者增强原有的功能,MyBatis中也一样,下面这篇文章主要给大家介绍了关于Mybatis第三方PageHelper分页插件的使用与原理,需要的朋友可以参考下
    2023-02-02
  • Java中的Spring 如何处理循环依赖

    Java中的Spring 如何处理循环依赖

    这篇文章主要介绍了Java中的Spring 如何处理循环依赖,依赖指的是Bean与Bean之间的依赖关系,循环依赖指的是两个或者多个Bean相互依赖,关于更多Spring 处理循环依赖的详情,需要的朋友可以参考下面文章具体内容
    2022-05-05
  • java数据结构之二分查找法 binarySearch的实例

    java数据结构之二分查找法 binarySearch的实例

    这篇文章主要介绍了java数据结构之二分查找法 binarySearch的实例的相关资料,希望通过本文能帮助到大家,让大家理解掌握这部分内容,需要的朋友可以参考下
    2017-10-10
  • mybatis自动扫描和自定义类注解方式

    mybatis自动扫描和自定义类注解方式

    这篇文章主要介绍了mybatis自动扫描和自定义类注解方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-10-10
  • mybatis 实现字段大小写赋值

    mybatis 实现字段大小写赋值

    这篇文章主要介绍了mybatis 实现字段大小写赋值,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-11-11

最新评论