網站首頁 編程語言 正文
場景:針對于分布式并發環境,易出現編碼生成重復問題
方案特點:串行操作可避免阻塞加鎖,處理效率更高
具體解決方案
private final static String ENTERPRISE_CODE = "enterpriseCode"; @Resource private RedisTemplate redisTemplate; private String generateCode() { ? ? String code; ? ? if (!redisTemplate.hasKey(ENTERPRISE_CODE)) { ? ? ? ? // Mybatis-Plus 查詢數據庫中企業編碼最大值 ? ? ? ? EnterprisePO enterprise = enterpriseService.getOne( ? ? ? ? ? ? Wrappers.lambdaQuery() ? ? ? ? ? ? ? ? .orderByDesc(EnterprisePO::getCode) ? ? ? ? ? ? ? ? .last("limit 1")); ? ? ? ? // 緩存企業編碼 ? ? ? ? if (ObjectUtils.isNotEmpty(enterprise)) { ? ? ? ? ? ? // 如果 key 不存在才 set 避免并發重復 set,setIfAbsent() 屬于原子操作 ? ? ? ? ? ? redisTemplate.opsForValue().setIfAbsent(ENTERPRISE_CODE, Long.valueOf(enterprise.getCode())); ? ? ? ? ? ? // 也可設置 key 過期時間,此處設置為 1 天 ? ? ? ? ? ? // redisTemplate.opsForValue().setIfAbsent(ENTERPRISE_CODE, Long.valueOf(enterprise.getCode()), 1, TimeUnit.DAYS); ? ? ? ? } ? ? } ? ? // 以遞增方式緩存最新編碼 ? ? Long number = redisTemplate.opsForValue().increment(ENTERPRISE_CODE, 1L); ? ? // %06d 意為保留 6 位數,不足六位數字前面補 0 ? ? code = String.format("%06d", number); ? ? return code; }
原文鏈接:https://www.cnblogs.com/pandacode/p/16093023.html
相關推薦
- 2023-11-19 樹莓派/arm設備上安裝火狐Firefox瀏覽器
- 2023-01-26 如何在.Net?7中將Query綁定到數組詳解_實用技巧
- 2022-12-21 Python實現簡易計算器的示例代碼_python
- 2023-03-15 手把手教你用Python中的Linting提高代碼質量_python
- 2022-05-04 Python?GUI編程之tkinter?關于?ttkbootstrap?的使用詳解_python
- 2022-08-27 Pycharm遠程連接服務器跑代碼的實現_python
- 2022-07-13 查看工具設置的編碼 sys.getdefaultencoding()
- 2022-09-13 Android四大組件之Service服務詳細講解_Android
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支