放弃redis使用mongodb做任务队列支持增删改管理 推荐
2014-04-30 11:26
507 查看
使用mongodb做任务队列管理支持增删改 ,我是喜欢用redis的list做队列的,但是这边经常堆积任务,需要查看并删除清空队列,有可能会根据一些content的字段来进行删除,有可能是会针对发件人,或者是时间段来删除。 这样redis真的不太适合了,因为redis的队列只能是一个值,当时咱们也可以只是存一个任务id,然后放到redis hash来做,处理的时候,无逻辑,但是查询修改的时候,会发信,逻辑有些复杂,算了,直接用mongodb做吧。 其实选择mongodb做队列的原因很简单,性能可以,在这种场景下查询起来不比mysql差。
后端的进程,一直取数据。
取到任务后,扔给后面的进程来出来。
当然仅此这样肯定是不行的,在任务并发的时候,你还来不及删除的时候,这个任务已经又被别人搞去了 。 这个时候怎么办? 怎么解决控制原子问题。
第一个方法是文件锁的方式,findAndModify 这个函数,查询的时候,删除可以remove或者是update
第二个方法是mq派发的模式,拿出一个后端进程专门取数据,然后派发给别的线程。就这么简单。
下面是我用mongo做队列的效果,仅供参考。。。。
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做队列的效果,仅供参考。。。。
相关文章推荐
- 【原创】 在django中使用celery 任务队列,redis做后端
- spring boot-使用redis的Keyspace Notifications实现定时任务队列
- springboot使用redis队列作为后台任务处理队列
- 使用Redis实现任务队列
- 使用NODEJS+REDIS开发一个消息队列以及定时任务处理
- 关于redis中使用锁机制,( 实现分布式锁和任务队列)
- 使用Redis做任务队列(Golang)
- celery配合rabbitmq任务队列实现任务的异步调度执行[celery redis] 推荐
- python操作mysq-redis脚本及使用nohup或crontab任务后台执行
- rabbitmq工作队列实现高性能任务的负载分发[python实例] 推荐
- 强烈推荐:Wiz知识管理工具--我使用频率最高的软件
- 如何使用Jedis操作Redis消息队列
- 监控开发之用munin来自定义插件监控redis和mongodb 推荐
- 线程池使用ExecutorService 多线程处理队列任务
- (转)使用 Spring缓存抽象 支持 EhCache 和 Redis 混合部署
- redis : 桌面管理工具 redis-desktop-manager使用指南
- FreeRTOS学习笔记——任务间使用队列同步数据
- FreeRTOS学习笔记——任务间使用队列同步数据
- 常见NoSQL的对比及使用场景(Redis,memcached,mongodb)
- UMU支持微软从今天开始使用 XPS 格式,逐渐放弃 PDF 格式