[高并发]在高并发的情况下,怎么生成像陌陌里面每个用户都有的 数字账号 呢,如何才会不重复呢? 数据库是mongodb
发布于 8 年前 作者 whw1988 5500 次浏览 来自 问答

[高并发]在高并发的情况下,怎么生成像陌陌里面每个用户都有的 数字账号 呢,如何才会不重复呢? 数据库是mongodb

mongodb的锁:

27.pic.jpg

10 回复
  • redis
  • 更复杂的可以采用发号器,比如snowflake

@i5ting redis可以保证 每个用户读到的maxId不一样吗,我是打算用一张表来存maxId,每个用户读到maxId然后加1,更新到用户表的id字段。 现在就是高并发时 好多用户读到的maxId可能会一样(虽然写有锁,可以保证maxId更新是对的,但是读没锁,会导致用户表的id字段有一些会一样)

@whw1988 redis的incr是有锁的,所以一定会是不同的。取到maxId之后,异步丢出去该更新

@i5ting 会不会多个用户一瞬间取到同一个maxId?

@i5ting 明白明白了,谢谢桑大神,是先incr,再取出来

插一句题外话,id不建议用数字类型,用随机串比较好

串行化影响性能,可以给不同服务器分配不同id列表,比如开100个server,第i个server只能注册mod100余i的id。

@Treagzhao 数字类型爬起来方便不好吗?

分布式ID,我最欣赏的实现也是snowflake, mongo的也差不多,了解一下原理,就可以自己实现一个了,关键还是思想,这不得不服,在这之前,我国的基本也是什么 给不同服务器分配不同id列表 这样的弱鸡办法。

@dou4cc 就是为了防止有人恶意爬库,所以都会换成随机串

回到顶部