欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Redis?生成分布式業(yè)務(wù)單號(hào)的實(shí)現(xiàn)

 更新時(shí)間:2024年04月03日 10:30:36   作者:我有一只肥螳螂  
在業(yè)務(wù)系統(tǒng)中很多場(chǎng)景下需要生成不重復(fù)的ID,本文主要介紹了Redis生成分布式業(yè)務(wù)單號(hào)的實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的可以了解一下

背景:微服務(wù)架構(gòu),有三個(gè)微服務(wù),分別是簽收、對(duì)賬、開(kāi)票,需要生成唯一的分布式單號(hào)

格式:標(biāo)識(shí) + 年月日 + 生成順序(三位)

例子:

  • QS20230301001,即2023年三月一日第一張簽收單
  • DZ20230212002,即2023年二月十二日第二張對(duì)賬單

原理:利用 Redis 的原子性,保證三位生成順序的唯一性

新建業(yè)務(wù)id枚舉類 IdEnum

public enum IdEnum {

    SIGN("QS"),
    VERIFY("DZ"),
    INVOICE("KP"),
    RECEIPT("SK"),
    ;

    /**
     * 單號(hào)前綴
     */
    private String prefix;

    IdEnum(String prefix) {
        this.prefix = prefix;
    }

    public String getPrefix() {
        return prefix;
    }
}

新建 IdUtil

  • getCacheKey:獲取 redis 的 KEY
  • getDay:獲取 服務(wù)標(biāo)識(shí) + 格式化的日期
  • completionSerial:從redis獲取生成順序后,格式化為固定三位
public class IdUtil {

    static final String  PREFIX = "ID_CASH_";

    public static String getCacheKey(String serialPrefix) {
        return PREFIX.concat(serialPrefix);
    }

    public static String getDay(IdEnum idEnum) {
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMMdd");
        StringBuffer sb = new StringBuffer();
        sb.append(idEnum.getPrefix());
        sb.append(formatter.format(LocalDateTime.now()));
        return sb.toString();
    }

    public static String completionSerial(Long serial) {
        Format formatCount = new DecimalFormat("000");
        String serialFormat = formatCount.format(serial);
        return  serialFormat;
    }
}

新建 IdService 獲取分布式單號(hào)

  • dayWithPrefix :獲取 服務(wù)標(biāo)識(shí) + 格式化的日期
  • redisCacheKey:Redis key
  • serial:利用 redis increment 獲取原子自增數(shù)
@Service
public class IdService {

    @Resource
    private RedisTemplate redisTemplate;

    public String generateNumber(IdEnum idEnum) {
        String dayWithPrefix = IdUtil.getDay(idEnum);
        String redisCacheKey = IdUtil.getCacheKey(dayWithPrefix);
        Long serial = redisTemplate.opsForValue().increment(redisCacheKey);
        redisTemplate.expire(redisCacheKey, 2, TimeUnit.DAYS);

        String num =  dayWithPrefix + IdUtil.completionSerial(serial);
        return num;
    }
}

最后使用

String number = idService.generateNumber(IdEnum.INVOICE);

到此這篇關(guān)于Redis 生成分布式業(yè)務(wù)單號(hào)的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)Redis 生成分布式業(yè)務(wù)單號(hào)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家! 

相關(guān)文章

  • 硬核!15張圖解Redis為什么這么快(推薦)

    硬核!15張圖解Redis為什么這么快(推薦)

    作為一名服務(wù)端工程師,工作中你肯定和 Redis 打過(guò)交道。Redis為什么快,這點(diǎn)想必你也知道,至少為了面試也做過(guò)準(zhǔn)備,今天通過(guò)本文給大家介紹下,感興趣的朋友一起看看吧
    2020-10-10
  • Redis實(shí)現(xiàn)延遲任務(wù)的三種方法詳解

    Redis實(shí)現(xiàn)延遲任務(wù)的三種方法詳解

    延遲任務(wù)(Delayed Task)是指在未來(lái)的某個(gè)時(shí)間點(diǎn),執(zhí)行相應(yīng)的任務(wù),本文為大家整理了三種常見(jiàn)的實(shí)現(xiàn)方法,感興趣的小伙伴可以參考一下
    2025-04-04
  • Redis常用的數(shù)據(jù)結(jié)構(gòu)及實(shí)際應(yīng)用場(chǎng)景

    Redis常用的數(shù)據(jù)結(jié)構(gòu)及實(shí)際應(yīng)用場(chǎng)景

    本文介紹了Redis中常用的數(shù)據(jù)結(jié)構(gòu),包括字符串、列表、集合、哈希表、有序集合和Bitmap,并詳細(xì)說(shuō)明了它們?cè)诟鞣N場(chǎng)景下的使用,需要的朋友可以參考下
    2024-05-05
  • Window server中安裝Redis的超詳細(xì)教程

    Window server中安裝Redis的超詳細(xì)教程

    這篇文章主要介紹了Window server中安裝Redis的教程,本文通過(guò)圖文實(shí)例代碼相結(jié)合給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-11-11
  • sentinel支持的redis高可用集群配置詳解

    sentinel支持的redis高可用集群配置詳解

    這篇文章主要為大家介紹了sentinel支持的redis高可用集群配置詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步早日升職加薪
    2022-04-04
  • Redisson分布式鎖解鎖異常問(wèn)題

    Redisson分布式鎖解鎖異常問(wèn)題

    文章主要描述了在使用Redisson進(jìn)行分布式鎖操作時(shí),遇到的`IllegalMonitorStateException`異常,通過(guò)分析報(bào)錯(cuò)信息,作者發(fā)現(xiàn)了問(wèn)題的根源在于線程嘗試解鎖但未按順序執(zhí)行,作者提出了兩種解決方案:在解鎖前增加判斷,確保線程已獲得鎖
    2024-12-12
  • redis?protocol通信協(xié)議及使用詳解

    redis?protocol通信協(xié)議及使用詳解

    這篇文章主要為大家介紹了redis?protocol通信協(xié)議及使用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-07-07
  • 詳解redis中的鎖以及使用場(chǎng)景

    詳解redis中的鎖以及使用場(chǎng)景

    這篇文章主要介紹了詳解redis中的鎖以及使用場(chǎng)景,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • 淺析PHP分布式中Redis實(shí)現(xiàn)Session的方法

    淺析PHP分布式中Redis實(shí)現(xiàn)Session的方法

    這篇文章主要介紹了PHP分布式中Redis實(shí)現(xiàn)Session的方法,文中詳細(xì)介紹了兩種方法的使用方法,并給出了測(cè)試的示例代碼,有需要的朋友可以參考借鑒,下面來(lái)一起看看吧,
    2016-12-12
  • 高效異步redis客戶端aredis優(yōu)劣勢(shì)原理解析

    高效異步redis客戶端aredis優(yōu)劣勢(shì)原理解析

    這篇文章主要介紹了高效異步redis客戶端aredis優(yōu)劣勢(shì)原理解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-09-09

最新評(píng)論