通过redis生成分布式自增的订单编号

电商系统中,为了生成不重复且可读性强的订单号,通常避免使用UUID。本文介绍了通过结合DateHelper获取的14位日期时间和Redis生成6位数的方式,利用BigInteger存储,确保在高并发下每秒可生成10万+订单号。如需求更大,可通过调整倍数值实现。
摘要由CSDN通过智能技术生成

在我们电商交易系统里面经常会生成订单号,一般采用UUID直接生成字符串,理论情况下不会重复,但是还是有可能重复的,并且这种订单号可读性特别差,所以我们会选择用redis来生成订单号,具体代码如下:

1,用DateHelper生成由年月日时分秒生成14位数,再通过redis生成6位数。这种可以用BigInteger存储,理论上可以支持1秒产生100万个订单,如果实际生产会更大,可以把倍数值调大。

package com.hcmony.sword;

import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.time.DateFormatUtils;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;

import java.util.Calendar;

/**
 * <h3>固定生成20位</h3>
 * 2019 1021 1730 56 000001
 * @author hcmony
 * @since V1.0.0, 2019/10/21 10:21
 */
public class RedisIdGenerator {

    private final static int DEFAULT_LEN = 5;
    private final static int DEFAULT_EXPIRE_TIME = 1000;
    private final static String DEFAULT_KEY = "com.hcmony.id";

    private final JedisPool jedisPool;
    private final int length;
    private final int expireTime;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值