全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

详解Spring极速集成注解redis实录

Redis 做为基于内存的 Key-Value 数据库,用来做缓存服务器性价比相当高。

官方推出的面向 Java 的 Client Jedis,提供了很多接口和方法,可以让 Java 操作使用 Redis。

Spring Data Redis 为 Spring 团队对 Jedis 进行了封装,集成 Jedis 的一些命令和方法。

本文重点描述集成过程,能让你迅速的通过 spring-data-redis 将 redis 集成到 spring 项目中,毕竟大家都忙的。

1. 添加项目依赖

    <!--redis 缓存-->
    <dependency>
      <groupId>org.springframework.data</groupId>
      <artifactId>spring-data-redis</artifactId>
      <version>1.8.4.RELEASE</version>
    </dependency>
    <dependency>
      <groupId>redis.clients</groupId>
      <artifactId>jedis</artifactId>
      <version>2.9.0</version>
    </dependency>

2. 添加 spring-redis-context 配置

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:context="http://www.springframework.org/schema/context"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
            http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
            http://www.springframework.org/schema/context
            http://www.springframework.org/schema/context/spring-context.xsd">
  <description>redis 相关类 Spring 托管</description>

  <!--载入 redis 配置文件-->
  <context:property-placeholder location="classpath:redis.properties" ignore-unresolvable="true"/>

  <!-- 配置 JedisPoolConfig 实例 -->
  <bean id="poolConfig" class="redis.clients.jedis.JedisPoolConfig">
    <property name="maxIdle" value="${redis.maxIdle}"/>
    <property name="maxTotal" value="${redis.maxActive}"/>
    <property name="maxWaitMillis" value="${redis.maxWait}"/>
    <property name="testOnBorrow" value="${redis.testOnBorrow}"/>
  </bean>

  <!-- 配置JedisConnectionFactory -->
  <bean id="jedisConnectionFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory">
    <property name="hostName" value="${redis.host}"/>
    <property name="port" value="${redis.port}"/>
    <property name="password" value="${redis.pass}"/>
    <property name="database" value="${redis.dbIndex}"/>
    <property name="poolConfig" ref="poolConfig"/>
  </bean>

  <!-- 配置RedisTemplate -->
  <bean id="redisTemplate" class="org.springframework.data.redis.core.RedisTemplate">
    <property name="connectionFactory" ref="jedisConnectionFactory"/>
  </bean>

  <!-- 配置RedisCacheManager -->
  <bean id="redisCacheManager" class="org.springframework.data.redis.cache.RedisCacheManager">
    <constructor-arg name="redisOperations" ref="redisTemplate"/>
    <property name="defaultExpiration" value="${redis.expiration}"/>
  </bean>

  <!-- 配置RedisCacheConfig -->
  <bean id="redisCacheConfig" class="com.rambo.sdh.common.util.RedisCacheConfig">
    <constructor-arg ref="jedisConnectionFactory"/>
    <constructor-arg ref="redisTemplate"/>
    <constructor-arg ref="redisCacheManager"/>
  </bean>
</beans>

JedisConnectionFactory 为 Jedis 连接工厂,配置由单独抽象的 JedisPoolConfig 提供。

如果你熟悉 Spring 的 JdbcTemplate 对象的话,这里大概能猜出来 RedisTemplate 的作用,RedisTemplate 对 RedisConnection 进行了封装。

提供连接管理,序列化等功能,它对 Redis 的交互进行了更高层次的抽象,极大的方便和简化了 Redis 的操作。

RedisCacheManager 做为 redis 统一的调度和管理者,有兴趣可以反编译源码看看。

继承自 org.springframework.cache.transaction.AbstractTransactionSupportingCacheManager 并实现 org.springframework.cache.CacheManager。

3. 添加 redis.properties

#============================#
#==== Redis settings ====#
#============================#
#redis 服务器 IP
redis.host=127.0.0.1

#redis 服务器端口
redis.port=6379

#redis 密码
redis.pass=redis#2017

#redis 支持16个数据库(相当于不同用户)可以使不同的应用程序数据彼此分开同时又存储在相同的实例上
redis.dbIndex=0

#redis 缓存数据过期时间单位秒
redis.expiration=3000

#控制一个 pool 最多有多少个状态为 idle 的jedis实例
redis.maxIdle=300

#控制一个 pool 可分配多少个jedis实例
redis.maxActive=600

#当borrow一个jedis实例时,最大的等待时间,如果超过等待时间,则直接抛出JedisConnectionException;
redis.maxWait=1000

#在borrow一个jedis实例时,是否提前进行alidate操作;如果为true,则得到的jedis实例均是可用的;
redis.testOnBorrow=true

当然配置文件你也可以硬编码到程序中,只是在参数发生改变的时候比较痛苦一点而已。

其中大部分配置项都是围绕着 jedisPool ,如果你对数据库连接池比较熟,你会发现它俩的配置项有点相似。

当系统 redis 遇到问题出现故障时,理解这里的选项是个不错的选择。

4. 编写自定义 redis 配置类

@Configuration
@EnableCaching
public class RedisCacheConfig extends CachingConfigurerSupport {
  protected final static Logger log = LoggerFactory.getLogger(RedisCacheConfig.class);

  private volatile JedisConnectionFactory mJedisConnectionFactory;
  private volatile RedisTemplate<String, String> mRedisTemplate;
  private volatile RedisCacheManager mRedisCacheManager;

  public RedisCacheConfig() {
    super();
  }

  public RedisCacheConfig(JedisConnectionFactory mJedisConnectionFactory, RedisTemplate<String, String> mRedisTemplate, RedisCacheManager mRedisCacheManager) {
    super();
    this.mJedisConnectionFactory = mJedisConnectionFactory;
    this.mRedisTemplate = mRedisTemplate;
    this.mRedisCacheManager = mRedisCacheManager;
  }

  public JedisConnectionFactory redisConnectionFactory() {
    return mJedisConnectionFactory;
  }

  public RedisTemplate<String, String> redisTemplate(RedisConnectionFactory cf) {
    return mRedisTemplate;
  }

  public CacheManager cacheManager(RedisTemplate<?, ?> redisTemplate) {
    return mRedisCacheManager;
  }

  @Bean
  public KeyGenerator keyGenerator() {
    return new KeyGenerator() {
      @Override
      public Object generate(Object o, Method method, Object... objects) {
        StringBuilder sb = new StringBuilder();
        sb.append(o.getClass().getName());
        sb.append(method.getName());
        for (Object obj : objects) {
          sb.append(obj.toString());
        }
        return sb.toString();
      }
    };
  }
}

该配置类继承自 org.springframework.cache.annotation.CachingConfigurerSupport 并实现 org.springframework.cache.annotation.CachingConfigurer 的方法。

通俗一点,该类告诉 spring 当前使用的缓存服务为 redis 并自定义了缓存 key 生成的规则。

5. 在你喜欢的地方进行注解缓存

缓存一般使用在服务层,在你想缓存的方法上面添加相应的注解即可,下面三个缓存的注解你得掌握。

@Cacheable  spring 会在其被调用后将返回值缓存起来,以保证下次利用同样的参数来执行该方法时可以直接从缓存中获取结果,而不需要再次执行该方法。

@CachePut  标注的方法在执行前不会去检查缓存中是否存在之前执行过的结果,而是每次都会执行该方法,并将执行结果以键值对的形式存入指定的缓存中。

@CacheEvict 用来标注在需要清除缓存元素的方法或类上的。

当然这些注解里面还有很多其他的属性配置,配合 spring-el 表达式能做的事情还有很多,大概只有你想不到,没有做不到。

在业务规则比较复杂的情况下,缓存 key 的设计相当重要,设计出色可以使你的应用飞起来。

整个集成工作就结束了,是不是很简单,上述算是 redis 的冰山一角,还有很多像 redis 路由/分布式/集群....,有机会实践慢慢体会。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


# spring  # redis  # 注解  # Spring集成注解redis  # 详解SpringBoot集成Redis来实现缓存技术方案  # Spring Boot Redis 集成配置详解  # 详解Spring-Boot集成Spring session并存入redis  # 详解Redis 缓存 + Spring 的集成示例  # Spring Boot集成Redis实现缓存机制(从零开始学Spring Boot)  # Spring集成Redis详解代码示例  # 还有很多  # 进行了  # 你想  # 自定义  # 配置文件  # 飞起  # 都是  # 是个  # 如果你  # 让你  # 大家都  # 最多  # 其他的  # 有机会  # 会在  # 而不  # 更高  # 很简单  # 并将  # 有兴趣 


相关文章: 移民网站制作流程,怎么看加拿大移民官网?  网站制作大概要多少钱一个,做一个平台网站大概多少钱?  如何在腾讯云服务器上快速搭建个人网站?  如何用西部建站助手快速创建专业网站?  h5网站制作工具有哪些,h5页面制作工具有哪些?  头像制作网站在线观看,除了站酷,还有哪些比较好的设计网站?  如何设置并定期更换建站之星安全管理员密码?  宁波自助建站系统如何快速打造专业企业网站?  免费制作统计图的网站有哪些,如何看待现如今年轻人买房难的情况?  南平网站制作公司,2025年南平市事业单位报名时间?  公众号网站制作网页,微信公众号怎么制作?  如何在阿里云完成域名注册与建站?  如何通过虚拟主机快速完成网站搭建?  高性能网站服务器部署指南:稳定运行与安全配置优化方案  已有域名和空间如何搭建网站?  广州营销型建站服务商推荐:技术优势与SEO优化解析  如何快速搭建个人网站并优化SEO?  如何快速搭建安全的FTP站点?  linux top下的 minerd 木马清除方法  如何自定义建站之星网站的导航菜单样式?  Dapper的Execute方法的返回值是什么意思 Dapper Execute返回值详解  如何快速生成橙子建站落地页链接?  如何快速生成凡客建站的专业级图册?  免费制作海报的网站,哪位做平面的朋友告诉我用什么软件做海报比较好?ps还是cd还是ai这几个软件我都会些我是做网页的?  如何选择香港主机高效搭建外贸独立站?  零基础网站服务器架设实战:轻量应用与域名解析配置指南  建站主机选哪家性价比最高?  山东云建站价格为何差异显著?  简易网站制作视频教程,使用记事本编写一个简单的网页html文件?  高端建站三要素:定制模板、企业官网与响应式设计优化  深圳 网站制作,深圳招聘网站哪个比较好一点啊?  建站主机与服务器功能差异如何区分?  建站之星价格显示格式升级,你的预算足够吗?  css网站制作参考文献有哪些,易聊怎么注册?  历史网站制作软件,华为如何找回被删除的网站?  如何高效完成独享虚拟主机建站?  广平建站公司哪家专业可靠?如何选择?  如何在宝塔面板中创建新站点?  相亲简历制作网站推荐大全,新相亲大会主持人小萍萍资料?  Android自定义listview布局实现上拉加载下拉刷新功能  打鱼网站制作软件,波克捕鱼官方号怎么注册?  高防服务器租用如何选择配置与防御等级?  个人摄影网站制作流程,摄影爱好者都去什么网站?  图片制作网站免费软件,有没有免费的网站或软件可以将图片批量转为A4大小的pdf?  建站之星会员如何解锁更多建站功能?  实例解析Array和String方法  实例解析angularjs的filter过滤器  如何挑选最适合建站的高性能VPS主机?  如何在服务器上配置二级域名建站?  如何快速搭建高效香港服务器网站? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。