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

原创
2016/06/30 09:00
阅读数 412

输入图片说明

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

mongodb的锁:

输入图片说明

回复

简单方法:使用redis做 更复杂的可以采用发号器,比如推特的snowflake

选用redis处理的好处

  • redis的incr是有锁的,所以一定会是不同的。
  • redis是内存数据库,速度非常快,支持集群,可抗压
  • 取到maxId之后,异步丢出去该更新就更新,依赖非常少

这个方案的缺点也是非常明显的,redis的运维是个头疼的事儿,一旦宕机,如何处理,可以参考微博相关redis技术文档。

科普

  • 原子性(atomicity):一个事务是一个不可分割的最小工作单位,事务中包括的诸操作要么都做,要么都不做。
  • Redis所有单个命令的执行都是原子性的,这与它的单线程机制有关;
  • Redis命令的原子性使得我们不用考虑并发问题,可以方便的利用原子性自增操作INCR实现简单计数器功能;
展开阅读全文
加载中
点击引领话题📣 发布并加入讨论🔥
0 评论
0 收藏
0
分享
返回顶部
顶部