自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

基于Redisson的RAtomicLong實(shí)現(xiàn)全局唯一工單號(hào)生成器

開(kāi)發(fā) 開(kāi)發(fā)工具
通過(guò)Redisson的RAtomicLong,我們成功實(shí)現(xiàn)了一個(gè)簡(jiǎn)單而強(qiáng)大的全局唯一工單號(hào)生成器。該生成器保證了唯一性,且在分布式環(huán)境中表現(xiàn)出色。在實(shí)際應(yīng)用中,可以根據(jù)業(yè)務(wù)需求進(jìn)行調(diào)整和擴(kuò)展,以滿(mǎn)足更復(fù)雜的場(chǎng)景。

最近幾年,我一直從事的是運(yùn)營(yíng)平臺(tái)業(yè)務(wù)開(kāi)發(fā)。每天,我們都需要處理大量的工單配置工作。為了生成工單號(hào),我們建立了一張專(zhuān)用的數(shù)據(jù)庫(kù)表,用于記錄和生成工單號(hào)。每次創(chuàng)建工單時(shí),我們會(huì)查詢(xún)這張表,根據(jù)年份字段、月份字段和模塊編碼找到最大的自增序列號(hào)。隨后,我們將自增序列號(hào)加一,與模塊編碼、年月序列號(hào)拼接以生成工單號(hào),并將相關(guān)信息寫(xiě)入表中。這種方法一直使用得很順利,因?yàn)楣闻渲玫牧坎⒉皇翘貏e大,一直都沒(méi)有出現(xiàn)問(wèn)題。然而,最近我們?yōu)榈谌教峁┝艘粋€(gè)工單推送的接口,他們一次性推送了大量的工單,這導(dǎo)致不僅生成了許多重復(fù)工單號(hào),而且還引起了接口性能方面的問(wèn)題。因此,我們決定對(duì)工單號(hào)生成方式進(jìn)行改進(jìn),本文我們將介紹下我們新的生成方法。

實(shí)現(xiàn)思路

這次我們采用了 Redisson 的 RAtomicLong 來(lái)生成一個(gè)以固定字符加上年月為鍵的自增數(shù)。隨后,將自增數(shù)轉(zhuǎn)換為36進(jìn)制字符串,以年月和36進(jìn)制字符串拼接形成全局唯一的工單號(hào)。

代碼實(shí)現(xiàn)

SerialIdService.java

@Service
@Slf4j
public class SerialIdService {

    private static final String ID_KEY = "xiuji:";
    private static final int BASE_36 = 36;

    private static final Integer SEQUENCE_LENGTH = 5;
    @Resource
    private RedissonClient redissonClient;

    public String workSerialId() {
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyMM");
        String dateStr = LocalDate.now().format(formatter);
        //使用了Redisson的AtomicLong對(duì)象生成唯一序列號(hào)
        RAtomicLong atomicLong = redissonClient.getAtomicLong(ID_KEY+dateStr);
        //設(shè)置過(guò)期時(shí)間為35天
        if(atomicLong.get() == 0){
            atomicLong.expire(Duration.ofDays(35));
        }
        //將唯一序列號(hào)轉(zhuǎn)換為36進(jìn)制的字符串,長(zhǎng)度為4位,用于減少I(mǎi)D的長(zhǎng)度
        String sequenceStr = Long.toString(atomicLong.incrementAndGet(), BASE_36).toUpperCase();
        //36進(jìn)制的序列號(hào)若小于4位,則用0補(bǔ)齊高位
        if (sequenceStr.length() < SEQUENCE_LENGTH) {
            sequenceStr = String.format("%4s", sequenceStr).replace(' ', '0');;
        }
        String serialId = dateStr+sequenceStr;

        log.info("生成的工單號(hào):{}",dateStr+sequenceStr);
        return dateStr+sequenceStr;
    }

}

生成的工單號(hào)示例:

240121AXT6
240121AXT7
240121AXT8
240121AXT9
240121AXTA
240121AXTB
240121AXTC
240121AXTD
240121AXTE
240121AXTF
240121AXTG
240121AXTH
240121AXTI
240121AXTJ

總結(jié)

通過(guò)Redisson的RAtomicLong,我們成功實(shí)現(xiàn)了一個(gè)簡(jiǎn)單而強(qiáng)大的全局唯一工單號(hào)生成器。該生成器保證了唯一性,且在分布式環(huán)境中表現(xiàn)出色。在實(shí)際應(yīng)用中,可以根據(jù)業(yè)務(wù)需求進(jìn)行調(diào)整和擴(kuò)展,以滿(mǎn)足更復(fù)雜的場(chǎng)景。

責(zé)任編輯:武曉燕 來(lái)源: 修己xj
相關(guān)推薦

2016-01-08 10:55:31

PHP莫斯電碼生成器

2016-12-21 10:55:55

PHP莫斯電碼生成器

2024-10-29 08:30:31

2022-12-29 08:43:54

IDredis

2024-10-14 12:05:56

2021-07-01 06:58:12

高并發(fā)訂單號(hào)SCM

2017-03-20 17:49:21

Java Web模板代碼

2017-09-06 09:26:03

Python生成器協(xié)程

2020-09-08 11:21:48

SQL生成器跨庫(kù)

2022-03-03 08:30:41

GeneratorES6函數(shù)

2015-08-25 11:07:58

2017-07-01 16:02:39

分布式ID生成器

2025-01-23 08:36:27

CSS開(kāi)發(fā)工具

2010-09-07 16:31:17

SQL語(yǔ)句insert

2021-04-22 21:15:38

Generator函數(shù)生成器

2011-12-23 13:42:05

JavaScript

2024-09-04 08:55:56

2022-07-25 10:27:36

背景生成器工具前端

2023-05-04 16:24:10

人工智能圖像生成器

2023-02-07 16:11:41

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)