Maison  >  Questions et réponses  >  le corps du texte

node.js - nodejs 高并发下请求同一资源

问题描述:
举个例子,比如买票,数据库中只有一张票了,现在两个人同时购买这张票,请问nodejs是如何处理的?有人说,nodejs是单线程,不会产生此问题。那如果是利用多核多线程呢?或N台服务器,m个线程同时请求这个资源呢?感谢!

ringa_leeringa_lee2713 Il y a quelques jours518

répondre à tous(2)je répondrai

  • PHPz

    PHPz2017-04-17 13:20:46

    这个问题有可能会在买每一张票的时候发生,而不仅是最后一张票。另外,Node.js 是单线程处理,所以单机服务不会发生类似的问题,就算是多核也不会发生。不过如果有N台服务器在跑使用同一个数据库中的数据,这是多个进程在竞争资源。

    如果想简单的解决此类问题,给表加锁。如果希望高效一点处理此类问题,需要加一些缓存,如果是高并发的情况,需要在缓存层做一些初步的筛选。

    répondre
    0
  • 巴扎黑

    巴扎黑2017-04-17 13:20:46

    数据是在数据库中,高并发下的正确要依靠数据库来解决,比如使用乐观锁,给数据加版本号。

    select version,data from table;
    update table set data = 1,version = version + 1 where version = X
    

    根据update返回的affectedRows判断是否成功,再吐给前端结果。
    node 本身只是做一个请求处理和数据库命令的转发,一般都是异步回调实现,单进程下也是可以并发多个相同的请求到数据库,一般不会使用阻塞的方式去请求DB。

    répondre
    0
  • Annulerrépondre