为了账号安全,请及时绑定邮箱和手机立即绑定

放弃redis使用mongodb做任务队列支持增删改管理

标签:
MongoDB


使用mongodb做任务队列管理支持增删改 ,我是喜欢用redis的list做队列的,但是这边经常堆积任务,需要查看并删除清空队列,有可能会根据一些content的字段来进行删除,有可能是会针对发件人,或者是时间段来删除。  这样redis真的不太适合了,因为redis的队列只能是一个值,当时咱们也可以只是存一个任务id,然后放到redis hash来做,处理的时候,无逻辑,但是查询修改的时候,会发信,逻辑有些复杂,算了,直接用mongodb做吧。   其实选择mongodb做队列的原因很简单,性能可以,在这种场景下查询起来不比mysql差。

import pymongo

import time

connection=pymongo.Connection('localhost',27017)

#库

db = connection.test

#表

posts=db.test

ltime=time.time()

posts.insert({'good':1,'jid':ltime})

posts.find({'jid':ltime})

后端的进程,一直取数据。

posts.find({'jid':ltime}).sort('ltime',pymongo.DESCENDING)

取到任务后,扔给后面的进程来出来。

posts.remove({'jid':ltime})

当然仅此这样肯定是不行的,在任务并发的时候,你还来不及删除的时候,这个任务已经又被别人搞去了 。  这个时候怎么办?  怎么解决控制原子问题。

第一个方法是文件锁的方式,findAndModify  这个函数,查询的时候,删除可以remove或者是update

第二个方法是mq派发的模式,拿出一个后端进程专门取数据,然后派发给别的线程。就这么简单。

下面是我用mongo做队列的效果,仅供参考。。。。

wKioL1NgZlygastaAAZUlzl4R8s459.jpg

©著作权归作者所有:来自51CTO博客作者rfyiamcool的原创作品,谢绝转载,否则将追究法律责任

pymongopython mongodbmongodb 队列自动化项目


点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消