唯一id

录单还有一个问题,就是如何生成一个不会重复的id。要考虑到数据库、web server都可能有多台,在web和服务器都要注意同步,因此在内存中生成一个id的话,有可能导致重复。

网上有人说用系统时间加几位随机数,还有客户端ip什么的。系统时间不能保证唯一性,客户端ip之类的引入又加大了复杂度。

 

比较好的方法是在数据库建一张表,只有一条记录,就是nextId。每次需要唯一id时就去读这个表,同时更新nextId。

 

Tony的方法做了进一步扩展,不是每次取id时都读数据库,而是一次读100个。

在web端,用synchronized限制这个方法,在数据库端,用@Version字段来保证对数据库写操作的顺序(读记录的时候会记住@Version字段的值,写回时将该字段值修改;如果写回时发现该字段值和读的时候已经被一致,说明有别人写过,那么放弃)。

 

在这个sequence表里可以再加一个type字段,可以为别的用途的唯一id使用。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值