Redis實(shí)現(xiàn)編碼生成規(guī)則方式
適用場(chǎng)景
新增數(shù)據(jù)后自動(dòng)生成編碼,生成規(guī)則為MD + 年月日 + 4位序列號(hào)
如MD202310130001
場(chǎng)景分析
此場(chǎng)景需要注意的就是后四位序列號(hào)如果使用隨機(jī)4位數(shù)字,極大可能會(huì)生成重復(fù)的編碼,從而影響整個(gè)業(yè)務(wù),所以最好是使用從0開始自增,不僅避免的隨機(jī)生成重復(fù)編碼的可能,而且還方便使用人員根據(jù)編碼獲取到有用信息。
功能實(shí)現(xiàn)
private static final String PREFIX = "MD"; // 前綴
private static final String DATE_FORMAT = "yyyyMMdd"; // 年月日格式
/**
* 利用Redis生成編碼 (MD202310130001)
* @return
*/
private String generateTemplateNumber(){
SimpleDateFormat dateFormat = new SimpleDateFormat(DATE_FORMAT);
String currentDate = dateFormat.format(new Date());
//組裝Redis的key(自定義字符串 + 當(dāng)天的時(shí)間)
String key = String.format(RedisKeyConstants.TASK_TEMPLATE_CODE, currentDate);
Integer cache = cacheService.getCache(key, Integer.class);
String templateCode = generateTemplateCode(cache);
cacheService.incrBy(key,NumberUtils.INTEGER_ONE,ONE_DAY);
return templateCode;
}
/**
* 根據(jù)當(dāng)前最大值生成編碼(可寫在工具類中)
* @return
*/
public String generateTemplateCode(Integer num) {
if (ObjectUtils.isEmpty(num)){
num = 0;
}
AtomicInteger sequence = new AtomicInteger(num);
// 獲取當(dāng)前日期
SimpleDateFormat dateFormat = new SimpleDateFormat(DATE_FORMAT);
String currentDate = dateFormat.format(new Date());
// 生成4位序列號(hào)
int currentSequence = sequence.incrementAndGet();
String sequenceStr = String.format("%04d", currentSequence);
// 組裝編碼
return PREFIX + currentDate + sequenceStr;
}總結(jié)
相比查詢數(shù)據(jù)庫中編碼的最大值,然后再+1,效率更加高,代碼實(shí)現(xiàn)難度更加低,因?yàn)椴樵償?shù)據(jù)庫最大值,然后+1,可能要考慮不同天日期的處理,總之,下次遇到有這樣類似編碼生成的需求,直接用Redis的incrBy是不錯(cuò)之舉
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
詳解Redis中Lua腳本的應(yīng)用和實(shí)踐
這篇文章主要介紹了詳解Redis中Lua腳本的應(yīng)用和實(shí)踐,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2019-01-01
Redis和Lua實(shí)現(xiàn)分布式限流器的方法詳解
這篇文章主要給大家介紹了關(guān)于Redis和Lua實(shí)現(xiàn)分布式限流器的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Redis和Lua具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧2019-06-06
Redis Cluster集群數(shù)據(jù)分片機(jī)制原理
這篇文章主要介紹了Redis Cluster集群數(shù)據(jù)分片機(jī)制原理,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-04-04
Redis集群服務(wù)器的實(shí)現(xiàn)(圖文步驟)
本文介紹了Redis集群服務(wù)器的優(yōu)勢(shì),為讀者提供了全面的Redis集群服務(wù)器知識(shí)和使用技巧,具有一定的參考價(jià)值,感興趣的可以了解一下2023-09-09

