java生成一天内不重复的随机4位数字编号

有个需求需要生成不重复4位数字编号,格式是 天 + 4位数字。

实现思路:每天首次获取随机字符串时把所有的数字生成放入缓存中。然后随机从列表中取一条数据,然后更新缓存中的数据。这样就能保住每次拿到的数据不重复

废话不多说直接上代码

public String generate(String key) {
    String redisKey = "code:" + DateUtil.format(new Date(),"dd");
    //获取缓存中未被使用的编号
    List<String> values = redisCache.getCacheObject(redisKey);
    if(CollectionUtil.isEmpty(values)){
        //缓存中的数据为空 则生成0000- 9999放到缓存
        values = new ArrayList<>();
        int i = 0;
        while (i <= 9999){
            values.add(String.format("%1$04d", i));
            i++;
        }
    }
    //生成0 ~ values长度 随机数
    Random random = new Random();
    int index = random.nextInt(values.size() - 1);
    String code = values.get(index);
    //删除已经使用的编号 更新到缓存中
    values.remove(index);
    redisCache.setCacheObject(redisKey, values,1, TimeUnit.DAYS);
    return code;
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值