放弃redis使用mongodb做任务队列支持增删改管理-阿里云开发者社区

开发者社区> 数据库> 正文
登录阅读全文

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

简介:

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

1
2
3
4
5
6
7
8
9
10
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})


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


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


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


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



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


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

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



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

wKioL1NgZlygastaAAZUlzl4R8s459.jpg



 本文转自 rfyiamcool 51CTO博客,原文链接:http://blog.51cto.com/rfyiamcool/1404953,如需转载请自行联系原作者



版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

分享:
数据库
使用钉钉扫一扫加入圈子
+ 订阅

分享数据库前沿,解构实战干货,推动数据库技术变革

其他文章