美文网首页
SpringBoot开发之路——集成Redis

SpringBoot开发之路——集成Redis

作者: 我是顾子晨 | 来源:发表于2019-10-24 23:10 被阅读0次

项目地址:nm-example
今天开发的时候遇到一个需求:
在集群部署服务时,需要处理定时任务不能同一时间执行。
后面实现的思路是这样的:
后之后就顺便在springBoot 上面实现了一下主要代码部分所以在这里记录一下。

  • 每个定时任务都需要设置一下执行时间的间隔
  • 每个定时任务执行时,都要到redis 里面检查一下,执行时间。
  • 如果redis 里面没有值则可以认为没有别的服务执行过,此时可以执行任务
  • 否则取出redis 中保存的上一次执行时间判定,如果上次执行的时间与当前时间判定,已经超过执行定时任务的时间间隔。
  • 如果超过则可以执行,否则不执行
  • 如何保证redis中存放的执行时间数据的原子性?
  • 这里使用的是redis 的乐观锁,watch。数据提交时如果数据版本与原来取出的数据版本不一致则提交失败,此时放弃执行定时任务。所以在这里使用 “乐观锁” 非常合适

这里使用的springBoot 版本为:


    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
        <spring-cloud.version>Finchley.SR1</spring-cloud.version>
    </properties>
    
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.6.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring-cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <dependency>
                <groupId>org.apache.commons</groupId>
                <artifactId>commons-pool2</artifactId>
                <version>2.4.3</version>
            </dependency>
        </dependencies>
    </dependencyManagement>

以前使用的版本为:

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.5.1.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

所以集成的时候出现了一些问题,原因是:

//原版本
import org.springframework.data.redis.connection.jedis.JedisConnectionFactory;

//2.xx以后使
import org.springframework.data.redis.connection.RedisConnectionFactory;

创建:redisTemplate


/***
 *
 * @Auther: guzhangwen
 * @BusinessCard https://blog.csdn.net/gu_zhang_w
 * @Date: 2019/10/24
 * @Time: 21:46
 * @version : V1.0
 */
@Configuration
public class MyConfigure {

    /**
     * 操作redis 模板工具类
     * @return
     */
    @Bean
    public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {
        RedisTemplate<String, Object> goodsRedisTemplate = new RedisTemplate<>();
        goodsRedisTemplate.setConnectionFactory(redisConnectionFactory);
        /**
         * 设置value 类型的序列化实现,如果不设置使用increment 会报错
         */
        GenericToStringSerializer genericToStringSerializer = new GenericToStringSerializer(Object.class);
        goodsRedisTemplate.setValueSerializer(genericToStringSerializer);
        goodsRedisTemplate.setKeySerializer(new StringRedisSerializer());
        goodsRedisTemplate.afterPropertiesSet();
        return goodsRedisTemplate;
    }
}

之后就可以通过注入使用redisTemplate了

相关文章

网友评论

      本文标题:SpringBoot开发之路——集成Redis

      本文链接:https://www.haomeiwen.com/subject/aurjvctx.html