亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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,則表示該鍵沒(méi)有設(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控制臺(tái)實(shí)現(xiàn)猜拳游戲小游戲

    Java控制臺(tái)實(shí)現(xiàn)猜拳游戲小游戲

    這篇文章主要為大家詳細(xì)介紹了Java控制臺(tái)實(shí)現(xiàn)猜拳游戲小游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-11-11
  • 深入了解JAVA Jersey框架

    深入了解JAVA Jersey框架

    這篇文章主要介紹了JAVA Jersey的概念以及使用方法,文中講解非常詳細(xì),對(duì)大家的學(xué)習(xí)工作有所幫助,感興趣的朋友可以參考下
    2020-06-06
  • java jdk1.8 使用stream流進(jìn)行l(wèi)ist 分組歸類操作

    java jdk1.8 使用stream流進(jìn)行l(wèi)ist 分組歸類操作

    這篇文章主要介紹了java jdk1.8 使用stream流進(jìn)行l(wèi)ist 分組歸類操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-10-10
  • 詳解 Java繼承關(guān)系下的構(gòu)造方法調(diào)用

    詳解 Java繼承關(guān)系下的構(gòu)造方法調(diào)用

    這篇文章主要介紹了詳解 Java繼承關(guān)系下的構(gòu)造方法調(diào)用的相關(guān)資料,希望通過(guò)本文能幫助到大家,讓大家理解掌握這部分內(nèi)容,需要的朋友可以參考下
    2017-10-10
  • Maven引入與打包指定目錄下的第三方sdk的幾種方法

    Maven引入與打包指定目錄下的第三方sdk的幾種方法

    本文主要介紹了Maven引入與打包指定目錄下的第三方sdk的幾種方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2024-09-09
  • 最新評(píng)論