Web应用中的轻量级消息队列
来源:互联网 发布:建设行业数据 编辑:程序博客网 时间:2024/04/30 14:44
上述消息队列的软件中,大多为了实现AMQP,STOMP,XMPP之类的协议,变得极其重量级,但在很多Web应用中的实际情况是:我们只是想找到一个缓解高并发请求的解决方案,不需要杂七杂八的功能,一个轻量级的消息队列实现方式才是我们真正需要的。
第一感觉是能不能使用memcached来实现消息队列?稍加考虑后就会发现它不合适,因为memcached仅仅支持键值方式的操作,没有排序之类的功能,所以如果要用它来实现消息队列,则必须自己通过某个键来保存数组形式的队列,不过这样的话,在操作队列的时候很容易丢失数据,比如说我们要添加一个消息,则需先取出现有队列,然后把消息保存到队列尾部,最后保存队列,单纯使用memcached的话,由于我们无法保证整个过程的原子性,所以当处理若干个并发请求时,各个请求间可能会互相覆盖,丢失数据就在所难免(新的memcached扩展一定程度上能缓解这个问题)。另外,memcached只是内存键值缓存而已,一旦宕机,数据就消失了。
memcacheq的出现解决了上面的问题,它在memcached的基础上实现了消息队列,以php客户端为例:
消息从尾部入栈:memcache_set
消息从头部出栈:memcache_get
memcacheq依附于memcached之上,所以你可以通过现有的memcached工具来操作它,这无疑是它的一大优势,但它也有一个很大的缺点,那就是memcacheq本身的开发维护似乎并不活跃,如果遇到问题的话,你很可能需要自己动手解决。
目前看来,我更推荐下面这种解决方案,那就是redis,如果不了解,可以参考我以前的文章,表面上看,redis和memcached差不多,也是键值操作,但是redis本身实现了list,相关操作也可以保证是原子的,所以可以很自然的通过list来实现消息队列:
消息从尾部进队列:RPUSH
消息从头部出队列:LPOP
redis本身虽然是一个新项目,但很有朝气,开发维护也很活跃,如果你的下一个Web应用里需要使用轻量级的消息队列,不妨使用它,顺便说一句,redis里还有set结构,可以用来实现一个高效能的tag系统。
此外,还有不少其他的选择可供尝试,比如说MySQL第三方的Q4M引擎,通过扩展SQL语法来操作消息队列,也是一个不错的选择。
体验新版博客
- Web应用中的轻量级消息队列
- Web应用中的轻量级消息队列
- Web应用中的轻量级消息队列
- Web应用中的轻量级消息队列
- Web应用中的轻量级消息队列
- Web应用中的轻量级消息队列
- Web应用中的轻量级消息队列
- 0134 Web应用中的轻量级消息队列
- Web应用中的轻量级消息队列
- Web应用中的轻量级消息队列
- httpsqs 轻量级消息队列
- mcq 轻量级的消息队列
- 轻量级消息队列服务UCMQ
- mcq 轻量级的消息队列
- mcq 轻量级的消息队列
- 消息队列在 .NET 中的应用
- 消息队列在分布式系统中的应用
- kestrel轻量级消息队列的安装
- php正则修正符
- php细节
- 位运算
- 安装Eclipse来编译Arduino
- mysql数据库中的btree索引和hash索…
- Web应用中的轻量级消息队列
- Message Queue(消息队列)介绍与…
- 腾讯php程序员面试题目
- 猴子选大王(约瑟夫环)
- 基于OpenCV的PHP图像人脸检测识别…
- MySQL模式 : Strict Mode
- 面向英特尔® 架构 (IA) 创建和移植基于 NDK 的 Android* 应用
- HTTP协议之Chunked解析
- 兼容ff的页面浮动窗口,实现查找选…