[高并发]在高并发的情况下,怎么生成像陌陌里面每个用户都有的 数字账号 呢,如何才会不重复呢? 数据库是mongodb
mongodb的锁:
回复
简单方法:使用redis做 更复杂的可以采用发号器,比如推特的snowflake
选用redis处理的好处
- redis的incr是有锁的,所以一定会是不同的。
- redis是内存数据库,速度非常快,支持集群,可抗压
- 取到maxId之后,异步丢出去该更新就更新,依赖非常少
这个方案的缺点也是非常明显的,redis的运维是个头疼的事儿,一旦宕机,如何处理,可以参考微博相关redis技术文档。
科普
- 原子性(atomicity):一个事务是一个不可分割的最小工作单位,事务中包括的诸操作要么都做,要么都不做。
- Redis所有单个命令的执行都是原子性的,这与它的单线程机制有关;
- Redis命令的原子性使得我们不用考虑并发问题,可以方便的利用原子性自增操作INCR实现简单计数器功能;