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

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

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

項目場景:

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

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

解決方案:

訂單號生成規(guī)則: DD+年月日+5位流水號,流水號當天有效,第二天重新計數(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ā)問題
 */
@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);
        // 獲取當前日期
        SimpleDateFormat dateFormat = new SimpleDateFormat(DATE_FORMAT);
        String currentDate = dateFormat.format(new Date());
        stringBuffer.append(currentDate);
        // 獲取流水號
        Long increment = redisTemplate.opsForValue().increment(ORDER_SERIAL_NUMBER, 1);
		
		/**
		 * 返回值過期時間,單位為秒。
		 * 如果返回-2,則表示該鍵不存在;
		 * 如果返回-1,則表示該鍵沒有設置過期時間;
		 */
		Long expire = redisTemplate.getExpire(ORDER_SERIAL_NUMBER, TimeUnit.SECONDS);
		if(expire == -1){
			// 獲取距離當天結束的秒數(shù)
			LocalDateTime endOfDay = LocalDate.now().atTime(23, 59, 59);
			long secondsToMidnight = LocalDateTime.now().until(endOfDay, ChronoUnit.SECONDS);
            //初始設置過期時間
            redisTemplate.expire(ORDER_SERIAL_NUMBER, secondsToMidnight, TimeUnit.SECONDS);
        }
        String format = String.format("%05d", increment);
        stringBuffer.append(format);
        return stringBuffer.toString();
    }
}

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

相關文章

  • Java控制臺實現(xiàn)猜拳游戲小游戲

    Java控制臺實現(xiàn)猜拳游戲小游戲

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

    深入了解JAVA Jersey框架

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

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

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

    詳解 Java繼承關系下的構造方法調(diào)用

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

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

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