请教 PHP 有什么的好的办法生成流水号?

2015-09-03 00:01:23 +08:00
 tanteng

比如流水号是 10 位: 1000000001 , 1000000002 ,这样的,我想使用 PHP 生成这样的流水号,根据我的理解,流水号应该是连续增长的,但是我每次生成的时候怎么不重复而且保持连续呢?

存数据库的话比较麻烦,而且每次要查库,还要更新数据,性能低。也不能使用随机码,这样数字不连续。放到 redis 里面万一 redis 挂掉了呢所以也不好。

PHP 生成流水号有什么好办法?

10269 次点击
所在节点    PHP
24 条回复
undeadking
2015-09-03 20:29:26 +08:00
楼主对于流水号的理解本身就是有问题的,于是陷入了伪问题,平时都不留意各种系统的流水号是什么规则么.
loginv2
2015-09-04 11:22:13 +08:00
默认环境为 centOS 6.5 下的话

使用文件锁定的方式(保证一致性)在自带的 RAMDISK 分区写入文件记录流水号
然后在业务结束之前 流水号写入数据库
( RAMDISK 和 文件锁 保证性能和一致性,服务器重启 数据库也没法用 所以也不用担心服务重启)
服务器开机以后执行将数据库最后的流水号写入到文件
lbp0200
2015-09-06 16:00:07 +08:00
guid 或者 redis 的原子加 1
xyzasd01
2015-09-08 11:10:52 +08:00
如果自增主键从 1 开始。那该订单的流水号就是 100000000 + $自增 ID 。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/217976

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX