node.js任务队列简易版实现(基于Promise)

任务队列适用在什么场景下?

  • 高并发
    日常情况中,如果并发数超过一定数量,会导致数据出错,系统奔溃,如果一台破电脑同时要执行10W个复杂同步或异步函数会怎样,同样是运行10W个函数如果用队列控制并发运行数,稳定性大大提升。

  • 并发任务时导致数据库错乱,不单单可以用锁来实现
    如果有并发任务要对表进行读取并修改的操作,并发的时候会发生什么情况,会同时读取并修改了数据,这肯定不是我们想要的。

  • 抢红包的实现,也是是用队列来一个一个读取并返回
    抢红包最好的实现方法就是用队列来实现,你们肯定会说不是可以用乐观锁,悲观锁,但是用这些锁的话,大家同时访问,只有一个人抢到了红包,其他人都报错误,这样肯定是不行的。

任务队列用法

创建Queue对象并设置并行数量
var q = new Queue(2); //并发数2
加入任务队列
q.set(fn1);//fn1为Promise函数
q.set(fn1).set(fn3);
加入并启动
q.set(fn1).set(fn2).set_run(fn5);//set_run()加入并启动
当前任务数
q.get();//输出任务数:n
启动
q.run();
暂停
q.pause();//暂停任务队列
恢复
q.rec();//恢复任务队列

demo 模拟异步函数代码

var q = new Queue(2);//创建队列对象
var ks = new Date().getTime();//记时
var fn1 = function () {
   //函数1
    var deferred = Q.defer();
    setTimeout(function 
  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
node.js队列实现使用了Redis作为后端数据库。在给定的引用和引用中,我们可以看到在utils/redis.js中定义了一个redisCreateClient函数,用于创建与Redis的连接。这个函数接受一个配置对象作为参数,并使用redis.createClient方法创建一个Redis客户端连接。然后通过调用client.connect()方法与Redis建立连接,并通过client.select(config.db)方法选择指定的数据库。最后,返回这个客户端连接。 在lib/core.js中,bootstrap函数使用了redisCreateClient函数创建了一个Redis连接。然后通过一个死循环来阻塞程序,等待从队列中获取任务。通过调用client.brPop(mqConfig.name, mqConfig.brPopTimeout)方法阻塞式地获取任务,并设置最大阻塞时间为config.queue.timeout。获取到任务后,进行相应的处理。如果获取任务出现错误,则捕获错误并继续循环。 根据给定的引用,目录结构变更后,config.js用于存放配置文件,lib/index.js是主目录入口文件,utils/redis.js是工具函数库中用于处理与Redis连接的文件。 总之,通过以上代码和配置文件的组合,可以实现一个基于node.js和Redis的队列系统。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [Nodejs + Redis = MQ(简易消息队列实现)](https://blog.csdn.net/qq_32930863/article/details/125882837)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值