Redis生成任务编号

Redis生成任务编号

每天都会重头开始

环境:基于springBoot,redis

1. 导包

 <!--redis启动器-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
            <version>2.5.4</version>
        </dependency>

2. 配置

spring:
  redis:
    # Redis服务器地址
    host: localhost
    # Redis服务器端口号
    port: 6379
    # 使用的数据库索引,默认是0
    database: 0
    # 连接超时时间
    timeout: 1800000
     # 设置密码
    password: 123456
    lettuce:
      pool:
        # 最大阻塞等待时间,负数表示没有限制
        max-wait: -1
        # 连接池中的最大空闲连接
        max-idle: 5
        # 连接池中的最小空闲连接
        min-idle: 0
        # 连接池中最大连接数,负数表示没有限制
        max-active: 20

3. Demo

@SpringBootTest
public class NumberTest {
    /**
     * redis流水号key
     */
    private final static String REDIS_KEY = "testKey";

    /**
     * 流水号格式
     */
    private final static String FORMAT_CODE = "0000";

    @Autowired
    private RedisTemplate redisTemplate;
    /**
     * 生成流水号
     * 实际业务需要检查数据库是否存在
     * @return 
     */
    public String nextValue() {
        LocalDateTime now = LocalDateTime.now();
        // 格式在这里定义
        String pattern = "yyyyMMdd";
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern(pattern);
        String date = formatter.format(now);
        DecimalFormat dft = new DecimalFormat(FORMAT_CODE);
        //查询 key 是否存在, 不存在返回 1 ,存在的话则自增加1
        Long count = redisTemplate.opsForValue().increment(REDIS_KEY, 1);
        // 设置key过期时间, 保证每天的流水号从1开始
        if (count == 1) {
            redisTemplate.expire(REDIS_KEY, 86400, TimeUnit.SECONDS);
        }
        // 格式化为四位流水号
        String code = dft.format(count);
        // 最终结果
        String result = date + code;
        return result;
    }
    
    @Test
    public void test(){
        nextValue();
    }
    //测试结果: 202302110001
    //          202302110002
      
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值