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開(kāi)始自增,不僅避免的隨機(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)前最大值生成編碼(可寫(xiě)在工具類中) * @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ù)庫(kù)中編碼的最大值,然后再+1,效率更加高,代碼實(shí)現(xiàn)難度更加低,因?yàn)椴樵償?shù)據(jù)庫(kù)最大值,然后+1,可能要考慮不同天日期的處理,總之,下次遇到有這樣類似編碼生成的需求,直接用Redis的incrBy是不錯(cuò)之舉
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Redis數(shù)據(jù)庫(kù)的安裝和配置教程詳解
這篇文章主要介紹了Redis數(shù)據(jù)庫(kù)的安裝和配置?,主要包括Linux環(huán)境安裝Redis和windows環(huán)境安裝Redis,redis客戶端安裝方法,本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),需要的朋友可以參考下2022-05-05windows下使用redis requirepass認(rèn)證不起作用的解決方法
今天小編就為大家分享一篇windows下使用redis requirepass認(rèn)證不起作用的解決方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-05-05通過(guò) Redis 實(shí)現(xiàn) RPC 遠(yuǎn)程方法調(diào)用(支持多種編程語(yǔ)言)
這篇文章主要介紹了通過(guò) Redis 實(shí)現(xiàn) RPC 遠(yuǎn)程方法調(diào)用,支持多種編程語(yǔ)言,本文就以Ruby和Python為例,給出了實(shí)現(xiàn)代碼,需要的朋友可以參考下2014-09-09redis主從復(fù)制的原理及實(shí)現(xiàn)
Redis主從復(fù)制是一種數(shù)據(jù)同步機(jī)制,它通過(guò)將一個(gè)Redis實(shí)例的數(shù)據(jù)復(fù)制到其他Redis,本文主要介紹了redis主從復(fù)制的原理及實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的可以了解一下2023-08-08Redis數(shù)據(jù)一致性問(wèn)題的三種解決方案
Redis(Remote?Dictionary?Server?),是一個(gè)高性能的基于Key-Value結(jié)構(gòu)存儲(chǔ)的NoSQL開(kāi)源數(shù)據(jù)庫(kù),大部分公司采用Redis來(lái)實(shí)現(xiàn)分布式緩存,用來(lái)提高數(shù)據(jù)查詢效率,本文就給大家介紹三種Redis數(shù)據(jù)一致性問(wèn)題的解決方案,需要的朋友可以參考下2023-07-07Redis實(shí)現(xiàn)庫(kù)存扣減的示例代碼
在日常開(kāi)發(fā)中有很多地方都有類似扣減庫(kù)存的操作,本文主要介紹了Redis實(shí)現(xiàn)庫(kù)存扣減的示例代碼,具有一定的參考價(jià)值,感興趣的可以了解一下2023-07-07