博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
生成唯一订单号单机模式和分布式
阅读量:4165 次
发布时间:2019-05-26

本文共 1673 字,大约阅读时间需要 5 分钟。

一、【单机模式】下生成唯一订单号

/** *	生成唯一的订单号:  * */public class OrderUtils {
/** 订单号生成 **/ private static ZoneId ZONE_ID = ZoneId.of("Asia/Shanghai"); /** 订单号开始节点 */ private static final AtomicInteger SEQ = new AtomicInteger(1000); private static final DateTimeFormatter DF_FMT_PREFIX = DateTimeFormatter.ofPattern("yyMMddHHmmss"); /** * 生成订单号 * @return */ public static String generateOrderNo(){
LocalDateTime dataTime = LocalDateTime.now(ZONE_ID); // 这里支持多少并发 由这里填写的数字决定 if(SEQ.intValue() > 9000){
SEQ.getAndSet(1000); } // String.format("%4d", andIncrement).replace(" ", "0"); return dataTime.format(DF_FMT_PREFIX)+ SEQ.getAndIncrement(); } /** * 这里测试的是 并发数量为 8000 */ public static void main(String[] args) {
List
orderNos = Collections.synchronizedList(new ArrayList
()); IntStream.range(0,8000).parallel().forEach(i->{
orderNos.add(generateOrderNo()); }); List
filterOrderNos = orderNos.stream().distinct().collect(Collectors.toList()); System.out.println(orderNos.size()); System.out.println(filterOrderNos.size()); }}

一、【分布式模式】下生成唯一订单号

分布式环境下生成唯一订单号:

@GetMapping("/order")public String order() {
// 获取键值,若没有键值则会新建,并初始化为 0 获取到值,并加1返回 Long orderNumber = redisTemplate.opsForValue().increment("order:number"); // 设置过期时间 redisTemplate.expire("order:number",10 ,TimeUnit.SECONDS); Object o = redisTemplate.opsForValue().get("order:number"); System.out.println("o.toString() = " + o.toString()); return o.toString();}

转载地址:http://jexxi.baihongyu.com/

你可能感兴趣的文章
加密算法在Java
查看>>
javascript/jquery获取地址栏url参数的方法
查看>>
值传递与引用传递
查看>>
getParameter()和getAttribute()的区别
查看>>
Java接口修饰符详解。
查看>>
J2EE面试题之 java如何找出一个int数组中出现次数最多的数字以及出现次数?
查看>>
Java面向对象三大特征怎么样轻松理解?
查看>>
sql的like怎么使用索引?
查看>>
JAVA的冒泡排序算法。
查看>>
Spring的控制反转(IoC)和面向切面编程(AOP)的概念浅析。
查看>>
mybatis或ibatis中的#和$的区别?
查看>>
Spring的事务管理。
查看>>
Spring事务管理(详解+实例)。
查看>>
关于Spring事务<tx:annotation-driven/>的理解。
查看>>
java中,只声明一个对象不赋值,与声明一个对象并赋为null,有啥区别?
查看>>
Struts2 - result标签的name属性和type属性。
查看>>
java捕获到异常以后,后面的代码还会执行吗?
查看>>
eclipse的java facets的runtimes如何删除tomcat?
查看>>
oracle序列的cache_size说明
查看>>
oracle中两个时间戳相减得到间隔毫秒数
查看>>