最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SpringBoot使用redis生成訂單號(hào)的實(shí)現(xiàn)示例

 更新時(shí)間:2024年09月18日 11:18:55   作者:濤哥是個(gè)大帥比  
在電商系統(tǒng)中,生成唯一訂單號(hào)是常見需求,本文介紹如何利用SpringBoot和Redis實(shí)現(xiàn)訂單號(hào)的生成,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

項(xiàng)目場(chǎng)景:

在開發(fā)電商系統(tǒng)等需要生成唯一訂單號(hào)的應(yīng)用程序中,我們經(jīng)常會(huì)遇到需要生成唯一訂單號(hào)的需求。本文將介紹如何使用Spring Boot和Redis來(lái)生成唯一的訂單號(hào),并提供相應(yīng)的代碼示例。

在開始之前,需要確保已經(jīng)安裝并配置好了Java開發(fā)環(huán)境、Spring Boot框架和Redis數(shù)據(jù)庫(kù)。

解決方案:

訂單號(hào)生成規(guī)則: DD+年月日+5位流水號(hào),流水號(hào)當(dāng)天有效,第二天重新計(jì)數(shù)。

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Component;
 
import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.temporal.ChronoUnit;
import java.util.Date;
import java.util.concurrent.TimeUnit;
 
/**
 * redis的increment 遞增方法 | 處理防重復(fù)和并發(fā)問(wèn)題
 */
@Component
public class OrderNumberCodeUtils {
    private static final String PREFIX = "DD";
    private static final String DATE_FORMAT = "yyyyMMdd";
    private static final String ORDER_SERIAL_NUMBER = "order_serial_number";
 
    private static RedisTemplate redisTemplate;
 
    @Autowired
    public void redisTemplate(RedisTemplate redisTemplate){
        OrderNumberCodeUtils.redisTemplate = redisTemplate;
    }
 
    public static String generateOrderNumber() {
 
        StringBuffer stringBuffer = new StringBuffer();
        stringBuffer.append(PREFIX);
        // 獲取當(dāng)前日期
        SimpleDateFormat dateFormat = new SimpleDateFormat(DATE_FORMAT);
        String currentDate = dateFormat.format(new Date());
        stringBuffer.append(currentDate);
        // 獲取流水號(hào)
        Long increment = redisTemplate.opsForValue().increment(ORDER_SERIAL_NUMBER, 1);
		
		/**
		 * 返回值過(guò)期時(shí)間,單位為秒。
		 * 如果返回-2,則表示該鍵不存在;
		 * 如果返回-1,則表示該鍵沒有設(shè)置過(guò)期時(shí)間;
		 */
		Long expire = redisTemplate.getExpire(ORDER_SERIAL_NUMBER, TimeUnit.SECONDS);
		if(expire == -1){
			// 獲取距離當(dāng)天結(jié)束的秒數(shù)
			LocalDateTime endOfDay = LocalDate.now().atTime(23, 59, 59);
			long secondsToMidnight = LocalDateTime.now().until(endOfDay, ChronoUnit.SECONDS);
            //初始設(shè)置過(guò)期時(shí)間
            redisTemplate.expire(ORDER_SERIAL_NUMBER, secondsToMidnight, TimeUnit.SECONDS);
        }
        String format = String.format("%05d", increment);
        stringBuffer.append(format);
        return stringBuffer.toString();
    }
}

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

相關(guān)文章

  • java EasyExcel面向Excel文檔讀寫邏輯示例詳解

    java EasyExcel面向Excel文檔讀寫邏輯示例詳解

    這篇文章主要為大家介紹了java EasyExcel面向Excel文檔讀寫邏輯示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-07-07
  • 實(shí)例講解Java的Spring框架中的AOP實(shí)現(xiàn)

    實(shí)例講解Java的Spring框架中的AOP實(shí)現(xiàn)

    這篇文章主要介紹了Java的Spring框架中的AOP實(shí)現(xiàn)實(shí)例,AOP面向切面編程其實(shí)也可以被看作是一個(gè)設(shè)計(jì)模式去規(guī)范項(xiàng)目的結(jié)構(gòu),需要的朋友可以參考下
    2016-04-04
  • IntelliJ IDEA使用git初始化倉(cāng)庫(kù)的使用方法

    IntelliJ IDEA使用git初始化倉(cāng)庫(kù)的使用方法

    這篇文章主要介紹了IntelliJ IDEA使用git初始化倉(cāng)庫(kù)的使用方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-04-04
  • JavaSE static final及abstract修飾符實(shí)例解析

    JavaSE static final及abstract修飾符實(shí)例解析

    這篇文章主要介紹了JavaSE static final及abstract修飾符實(shí)例解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-06-06
  • 在Java中生成PDF文檔超實(shí)用教程

    在Java中生成PDF文檔超實(shí)用教程

    Java生成PDF文檔是許多開發(fā)者需要掌握的技術(shù),這篇文章主要介紹了在Java中生成PDF文檔的相關(guān)資料,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2026-02-02
  • Java生成唯一ID的三種方法總結(jié)

    Java生成唯一ID的三種方法總結(jié)

    單機(jī)環(huán)境下,可以使用AtomicLong來(lái)生成唯一ID;而在需要非純數(shù)字形式的場(chǎng)景中,可以通過(guò)UUID結(jié)合哈希函數(shù)如MD5或SHA-1轉(zhuǎn)換成數(shù)字,但需注意哈希碰撞的低概率風(fēng)險(xiǎn);對(duì)于分布式系統(tǒng),模擬Snowflake算法是一種復(fù)雜但有效的方法,每種方法都有其適用場(chǎng)景和潛在問(wèn)題
    2024-09-09
  • dubbo泛化調(diào)用使用及原理示例解析

    dubbo泛化調(diào)用使用及原理示例解析

    這篇文章主要為大家介紹了dubbo泛化調(diào)用使用及原理示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-09-09
  • SpringBoot 使用hibernate validator校驗(yàn)

    SpringBoot 使用hibernate validator校驗(yàn)

    這篇文章主要介紹了SpringBoot 使用hibernate validator校驗(yàn),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-11-11
  • Java計(jì)算程序代碼執(zhí)行時(shí)間的方法小結(jié)

    Java計(jì)算程序代碼執(zhí)行時(shí)間的方法小結(jié)

    這篇文章主要介紹了Java計(jì)算程序代碼執(zhí)行時(shí)間的方法,結(jié)合實(shí)例形式總結(jié)分析了java采用毫秒數(shù)及納秒數(shù)計(jì)算程序運(yùn)行時(shí)間的相關(guān)操作技巧,需要的朋友可以參考下
    2017-11-11
  • VMware虛擬機(jī)下hadoop1.x的安裝方法

    VMware虛擬機(jī)下hadoop1.x的安裝方法

    這篇文章主要為大家詳細(xì)介紹了VMware虛擬機(jī)下hadoop1.x的安裝方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-09-09

最新評(píng)論

伊吾县| 通江县| 托克逊县| 堆龙德庆县| 长寿区| 綦江县| 博罗县| 吴旗县| 土默特左旗| 舞阳县| 东平县| 涞水县| 融水| 吉安市| 田东县| 峡江县| 县级市| 灌阳县| 浮梁县| 通道| 涟水县| 连州市| 繁峙县| 洪江市| 辽宁省| 靖边县| 随州市| 新营市| 嘉禾县| 伊金霍洛旗| 昌都县| 扶余县| 普陀区| 马山县| 阳城县| 三门峡市| 化隆| 灌阳县| 惠东县| 永昌县| 湖南省|