求教下大神,交易流水号生成问题

aspirin199008 2015-04-01 05:33:02
求教大神们,类似于支付宝这种2015033100001000040049250764交易流水号是如何生成的。
并且是在高并发的情况下也能保证系统唯一性。而且还要考虑分布式系统中应用。
...全文
893 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
rumlee 2015-04-02
  • 打赏
  • 举报
回复
引用 4 楼 aspirin199008 的回复:
[quote=引用 2 楼 rumlee 的回复:] 最简单的方式用UUID。
同样先感谢回复了,uuid生成的确实能保证唯一,但是有些第三方支付可能不允许流水号中存在除数字外的字符,所以用uuid的话会存在问题。再次感谢[/quote] 那也容易啊,用服务器编号+年月日+流水号,服务器编号可以保证分布式的时候也不会重复,流水号生成的时候用内存缓存结合数据库的方式,内存中计算的时候同步控制一下,就没有问题,性能也很高。
aspirin199008 2015-04-02
  • 打赏
  • 举报
回复
引用 2 楼 rumlee 的回复:
最简单的方式用UUID。
同样先感谢回复了,uuid生成的确实能保证唯一,但是有些第三方支付可能不允许流水号中存在除数字外的字符,所以用uuid的话会存在问题。再次感谢
aspirin199008 2015-04-02
  • 打赏
  • 举报
回复
引用 1 楼 u013762572 的回复:
//2015 //03 //31 //00 //00 //10 //000 //40049250764 你可以先获取一下系统时间到毫秒级 剩下的40049250764这些位的做法我给的建议是: 使用的数据库吧,就是你每次取id最大的值,然后给id++就行了,那么高并发的问题你就可以给数据库去做了啊。。。。
先感谢大神的回复。首先说下我这的情况,因为是支付通道的交易流水号,所以在高并发情况下还要考虑下效率的问题,所以如果用数据库的话效率上来讲肯定没有直接在缓存中获取的快。所以数据库的话我这是没法考虑用的。
rumlee 2015-04-01
  • 打赏
  • 举报
回复
最简单的方式用UUID。
microhex 2015-04-01
  • 打赏
  • 举报
回复
//2015 //03 //31 //00 //00 //10 //000 //40049250764 你可以先获取一下系统时间到毫秒级 剩下的40049250764这些位的做法我给的建议是: 使用的数据库吧,就是你每次取id最大的值,然后给id++就行了,那么高并发的问题你就可以给数据库去做了啊。。。。

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧