?Redis 串行生成順序編碼的方法實(shí)現(xiàn)
場(chǎng)景:針對(duì)于分布式并發(fā)環(huán)境,易出現(xiàn)編碼生成重復(fù)問(wèn)題
方案特點(diǎn):串行操作可避免阻塞加鎖,處理效率更高
具體解決方案
private final static String ENTERPRISE_CODE = "enterpriseCode"; @Resource private RedisTemplate redisTemplate; private String generateCode() { ? ? String code; ? ? if (!redisTemplate.hasKey(ENTERPRISE_CODE)) { ? ? ? ? // Mybatis-Plus 查詢數(shù)據(jù)庫(kù)中企業(yè)編碼最大值 ? ? ? ? EnterprisePO enterprise = enterpriseService.getOne( ? ? ? ? ? ? Wrappers.<EnterprisePO>lambdaQuery() ? ? ? ? ? ? ? ? .orderByDesc(EnterprisePO::getCode) ? ? ? ? ? ? ? ? .last("limit 1")); ? ? ? ? // 緩存企業(yè)編碼 ? ? ? ? if (ObjectUtils.isNotEmpty(enterprise)) { ? ? ? ? ? ? // 如果 key 不存在才 set 避免并發(fā)重復(fù) set,setIfAbsent() 屬于原子操作 ? ? ? ? ? ? redisTemplate.opsForValue().setIfAbsent(ENTERPRISE_CODE, Long.valueOf(enterprise.getCode())); ? ? ? ? ? ? // 也可設(shè)置 key 過(guò)期時(shí)間,此處設(shè)置為 1 天 ? ? ? ? ? ? // redisTemplate.opsForValue().setIfAbsent(ENTERPRISE_CODE, Long.valueOf(enterprise.getCode()), 1, TimeUnit.DAYS); ? ? ? ? } ? ? } ? ? // 以遞增方式緩存最新編碼 ? ? Long number = redisTemplate.opsForValue().increment(ENTERPRISE_CODE, 1L); ? ? // %06d 意為保留 6 位數(shù),不足六位數(shù)字前面補(bǔ) 0 ? ? code = String.format("%06d", number); ? ? return code; }
到此這篇關(guān)于 Redis 串行生成順序編碼的方法實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān) Redis 串行生成順序編碼內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Redis中的配置文件,數(shù)據(jù)持久化,事務(wù)
這篇文章主要介紹了Redis中的配置文件,數(shù)據(jù)持久化,事務(wù)問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。2022-12-12將MongoDB作為Redis式的內(nèi)存數(shù)據(jù)庫(kù)的使用方法
這篇文章主要介紹了將MongoDB作為Redis式的內(nèi)存數(shù)據(jù)庫(kù)的使用方法,原理其實(shí)只是將內(nèi)存虛擬作為磁盤,需要的朋友可以參考下2015-06-06Redis為什么快如何實(shí)現(xiàn)高可用及持久化
這篇文章主要介紹了Redis為什么快如何實(shí)現(xiàn)高可用及持久化,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-12-12如何在centos中安裝redis插件bloom-filter
布隆過(guò)濾器在第一次add的時(shí)候自動(dòng)創(chuàng)建基于默認(rèn)參數(shù)的過(guò)濾器,Redis還提供了自定義參數(shù)的布隆過(guò)濾器,下面這篇文章主要給大家介紹了關(guān)于如何在centos中安裝redis插件bloom-filter的相關(guān)資料,需要的朋友可以參考下2021-11-11Redis不同數(shù)據(jù)類型的命令語(yǔ)句詳解
這篇文章主要介紹了Redis不同數(shù)據(jù)類型的命令語(yǔ)句,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-10-10