{eval=Array;=+count(Array);}
1、UUID
2、数据库自增
3、Snowflake
4、Redis
这种方式比较方便,有现成可用的JAR包,但是也有缺点:ID可读性不好,而且会造成索引树频繁页分裂,影响数据库性能和空间使用
维护一张序列表。考虑到性能问题,不必每次生成ID都去操作数据库,可以设置一定的步长比如1000,每次从表中拿1000个序列号,从每台服务器内存中线性去取
维护一个序列号键值对,利用Redis自增的原子性,生成序列号
同一毫秒可以产生ID数量4194304个,优点是完全内存操作性能好,缺点是依赖于系统时钟一致性。如果某台机器的系统时钟回拨,有可能造成ID冲突,或者ID乱序
最重要的还是根据项目的场景,尤其是并发量,选择最合适的方法
请点击关注按钮【IT徐胖子】会持续为大家奉献互联网和技术干货内容,感谢支持
由于是高并发情况,所以不建议使用数据库自增ID,可以参考如下方案:
1、redis自增id
2、UUID
3、时间戳+随机数
4、Twitter的snowflake算法
5、利用zookeeper生成唯一id,性能不如redis
6、MongoDB的ObjectId,和snowflake算法类似
随便哪个程序员都可以写出来一个生成订单的算法,除了美团、淘宝这种需要考虑订单重复,大多数企业还是发愁没有订单的状态,需要考虑这个问题的企业应该不差钱了,希望我的公司有机会让我来解决这个问题。
1:获取当前日期作为订单号的前8位
2:获取uuid,它是通用唯一识别码,进行hashcode转码仍然可以保证其唯一性,可以取12位
3:日期和uuid转码之后的12位拼接,一共20位,可以生成唯一订单号
最简单的办法就是用用户名➕ip➕时间生成订单号,然后计算哈希值后做一定转换就可以生成唯一订单号。不过唯一的问题就是不太好查。毕竟这种订单号没有任何规律可言,后期查询是个大麻烦。其实最建议的方式就是分渠道分地区建立订单号。就和身份证号生成机制一样,各个地区可以独立生成身份证号,最后合在一起还没有任何问题。
用算法呀。对订单这种,很简单。
商品id +用户id+时间戳+随机数+自增数
就能保证唯一性。现实中,没哪个用户去高并发下单(除非bug)。
看一下美团的leaf
https://tech.meituan.com/2019/03/07/open-source-project-leaf.html0
回答0
回答0
回答0
回答0
回答0
回答0
回答0
回答0
回答0
回答