使用redis生成流水号

转载请标明出处:

使用redis生成流水号_付付讶的博客-CSDN博客

本文出自使用redis生成流水号_付付讶的博客-CSDN博客   

 公司需求:生成14位时间+redis流水3位+"-"+4位字母数字随机+"-"+9位字母数字随机

把14位时间、redis流水号、字母数字随机数各写成一个方法,方便后期还有此类需求可以根据需求调用对应的方法获取数据进行拼接即可,灵活运用。

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.support.atomic.RedisAtomicLong;
import java.text.DecimalFormat;
import java.security.SecureRandom;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Random;


@Autowired
private RedisTemplate redisTemplate;


 /**
   * 获取14位时间方法
   * @return 例:20221206153030
   * @Author fu
   * @Date 10:40 2022/12/6
   */
    private String getDateStr() {
        Date date = new Date();
        SimpleDateFormat formatter = new SimpleDateFormat("yyyyMMddHHmmss");
        return formatter.format(date);
    }


 /**
   * 获取redis流水3位
   * @return 例:001
   * @Author fu
   * @Date 10:40 2022/12/6
   */
    public String incr() {
        //serial_number为redis键
        RedisAtomicLong entityIdCounter = new RedisAtomicLong("serial_number", redisTemplate.getConnectionFactory());
        Long increment = entityIdCounter.getAndIncrement();

        //STR_FORMAT 代表使用redis生成的流水位数,000代表三位数,当流水号大于999时自动从0开始
        final String STR_FORMAT = "000";
        if (increment == 0) {
            increment = increment + 1;
        } else if (increment > 999){
            increment = 0L;
        }
        //位数不够,前面补0
        DecimalFormat df = new DecimalFormat(STR_FORMAT);
        return df.format(increment);
    }


  /**
    * 获取指定长度的随机字母+数字
    * @return 例:89AB、05PQRS895
    * @Author fu
    * @Date 10:40 2022/12/6
    */
    private String SYMBOLS = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
    private Random RANDOM = new SecureRandom();
    //传参数字,如想生成9位随机数传9即可
    public String getRandomNumber(int length) {
        //自己设置指定长度
        char[] nonceChars = new char[length];
        for (int index = 0; index < nonceChars.length; ++index) {
            nonceChars[index] = SYMBOLS.charAt(RANDOM.nextInt(SYMBOLS.length()));
        }
        return new String(nonceChars);
    }

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值