高并发下怎么生成唯一订单号
方案一:
如果没有并发的话,订单号只在一个线程中产生,不同订单的时间戳不同,
时间戳+随机数(自增数)区分订单
如果有并发的话,并且订单号在同一台主机产生多个进程,只要把进程的ID添加到序列号中就可以保证订单号唯一。
如果有并发,订单在不同主机中,把IP地址 CPU序列号 能区分的号码添加到序列号中就能保证唯一。
方案二:
时间戳+用户ID+随机数+乐观锁
方案三:
可以用redis的原子递增,做高可用集群
redis本身就有生成序列号的功能,使用执久化的线程安全的
方案四:
java自带的UUID
XX的订单号:XXCN201700000000
YY的订单号: YYCN201700000000
年份要根据真实年份进行相应变化,然后一旦年份更新,后面8位要从00000000重新开始。
其实可以通过redis来做,不过这个需求也是奇葩,是怕人家不知道系统有多少订单?
如果是postgrel,可以用序列。
可以用redis的原子递增,做高可用集群
http://m.blog.csdn.net/shuaizai88/article/details/53566425
方案一:
如果没有并发的话,订单号只在一个线程中产生,不同订单的时间戳不同,
时间戳+随机数(自增数)区分订单
如果有并发的话,并且订单号在同一台主机产生多个进程,只要把进程的ID添加到序列号中就可以保证订单号唯一。
如果有并发,订单在不同主机中,把IP地址 CPU序列号 能区分的号码添加到序列号中就能保证唯一。
方案二:
时间戳+用户ID+随机数+乐观锁
方案三:
可以用redis的原子递增,做高可用集群
redis本身就有生成序列号的功能,使用执久化的线程安全的
方案四:
java自带的UUID
XX的订单号:XXCN201700000000
YY的订单号: YYCN201700000000
年份要根据真实年份进行相应变化,然后一旦年份更新,后面8位要从00000000重新开始。
其实可以通过redis来做,不过这个需求也是奇葩,是怕人家不知道系统有多少订单?
如果是postgrel,可以用序列。
可以用redis的原子递增,做高可用集群
http://m.blog.csdn.net/shuaizai88/article/details/53566425