当前位置:首页 > 科技  > 软件

基于Redisson的RAtomicLong实现全局唯一工单号生成器

来源: 责编: 时间:2024-01-26 09:01:36 269观看
导读最近几年,我一直从事的是运营平台业务开发。每天,我们都需要处理大量的工单配置工作。为了生成工单号,我们建立了一张专用的数据库表,用于记录和生成工单号。每次创建工单时,我们会查询这张表,根据年份字段、月份字段和模块

最近几年,我一直从事的是运营平台业务开发。每天,我们都需要处理大量的工单配置工作。为了生成工单号,我们建立了一张专用的数据库表,用于记录和生成工单号。每次创建工单时,我们会查询这张表,根据年份字段、月份字段和模块编码找到最大的自增序列号。随后,我们将自增序列号加一,与模块编码、年月序列号拼接以生成工单号,并将相关信息写入表中。这种方法一直使用得很顺利,因为工单配置的量并不是特别大,一直都没有出现问题。然而,最近我们为第三方提供了一个工单推送的接口,他们一次性推送了大量的工单,这导致不仅生成了许多重复工单号,而且还引起了接口性能方面的问题。因此,我们决定对工单号生成方式进行改进,本文我们将介绍下我们新的生成方法。ELs28资讯网——每日最新资讯28at.com

实现思路

这次我们采用了 Redisson 的 RAtomicLong 来生成一个以固定字符加上年月为键的自增数。随后,将自增数转换为36进制字符串,以年月和36进制字符串拼接形成全局唯一的工单号。ELs28资讯网——每日最新资讯28at.com

代码实现

SerialIdService.javaELs28资讯网——每日最新资讯28at.com

@Service@Slf4jpublic class SerialIdService {    private static final String ID_KEY = "xiuji:";    private static final int BASE_36 = 36;    private static final Integer SEQUENCE_LENGTH = 5;    @Resource    private RedissonClient redissonClient;    public String workSerialId() {        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyMM");        String dateStr = LocalDate.now().format(formatter);        //使用了Redisson的AtomicLong对象生成唯一序列号        RAtomicLong atomicLong = redissonClient.getAtomicLong(ID_KEY+dateStr);        //设置过期时间为35天        if(atomicLong.get() == 0){            atomicLong.expire(Duration.ofDays(35));        }        //将唯一序列号转换为36进制的字符串,长度为4位,用于减少ID的长度        String sequenceStr = Long.toString(atomicLong.incrementAndGet(), BASE_36).toUpperCase();        //36进制的序列号若小于4位,则用0补齐高位        if (sequenceStr.length() < SEQUENCE_LENGTH) {            sequenceStr = String.format("%4s", sequenceStr).replace(' ', '0');;        }        String serialId = dateStr+sequenceStr;        log.info("生成的工单号:{}",dateStr+sequenceStr);        return dateStr+sequenceStr;    }}

生成的工单号示例:ELs28资讯网——每日最新资讯28at.com

240121AXT6240121AXT7240121AXT8240121AXT9240121AXTA240121AXTB240121AXTC240121AXTD240121AXTE240121AXTF240121AXTG240121AXTH240121AXTI240121AXTJ

总结

通过Redisson的RAtomicLong,我们成功实现了一个简单而强大的全局唯一工单号生成器。该生成器保证了唯一性,且在分布式环境中表现出色。在实际应用中,可以根据业务需求进行调整和扩展,以满足更复杂的场景。ELs28资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-68323-0.html基于Redisson的RAtomicLong实现全局唯一工单号生成器

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: JDK17 与 JDK11 特性差异浅谈

下一篇: Dalvik与ART的架构差异,你学会了吗?

标签:
  • 热门焦点
  • 8月总票房已突破10亿!《封神》第一:口碑已经成了

    8月5日消息,据灯塔专业版数据,截至8月5日9时35分,8月总票房(含预售)已突破10亿。其中,《封神》以大比分的优势领先。根据官方消息,目前该片总票房已经超过14.
  • 线程通讯的三种方法!通俗易懂

    线程通信是指多个线程之间通过某种机制进行协调和交互,例如,线程等待和通知机制就是线程通讯的主要手段之一。 在 Java 中,线程等待和通知的实现手段有以下几种方式:Object 类下
  • CSS单标签实现转转logo

    转转品牌升级后更新了全新的Logo,今天我们用纯CSS来实现转转的新Logo,为了有一定的挑战性,这里我们只使用一个标签实现,将最大化的使用CSS能力完成Logo的绘制与动画效果。新logo
  • 如何正确使用:Has和:Nth-Last-Child

    我们可以用CSS检查,以了解一组元素的数量是否小于或等于一个数字。例如,一个拥有三个或更多子项的grid。你可能会想,为什么需要这样做呢?在某些情况下,一个组件或一个布局可能会
  • 多线程开发带来的问题与解决方法

    使用多线程主要会带来以下几个问题:(一)线程安全问题  线程安全问题指的是在某一线程从开始访问到结束访问某一数据期间,该数据被其他的线程所修改,那么对于当前线程而言,该线程
  • 得物宠物生意「狂飙」,发力“它经济”

    作者|花花小萌主近日,得物宣布正式上线宠物鉴别,通过得物App内的&ldquo;在线鉴别&rdquo;,可找到鉴别宠物的选项。通过上传自家宠物的部位细节,就能收获拥有专业资质认证的得物鉴
  • 三星折叠屏手机去年销售近1000万台 今年目标定为1500万

    7月29日消息,三星率先发力可折叠手机市场,在全球市场已经取得了非常亮眼的成绩,接下来会进一步巩固和扩大这一优势。三星在推出Galaxy Z Flip5和Galax
  • 联想YOGA 16s 2022笔记本将要推出,屏幕支持触控功能

    联想此前宣布,将于11月2日19:30召开联想秋季轻薄新品发布会,推出联想 YOGA 16s 2022 笔记本等新品。官方称,YOGA 16s 2022 笔记本将搭载 16 英寸屏幕,并且是一
  • onebot M24巧系列一体机采用轻薄机身设计,现已在各平台开售

    onebot M24 巧系列一体机目前已在线上线下各平台同步开售。onebot M24 巧系列采用一体化轻薄机身设计,最薄处为 10.15mm,拥有宝石红、午夜蓝、石墨绿、雅致
Top