首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于内存缓存的消息队列?

基于内存缓存的消息队列?
EN

Stack Overflow用户
提问于 2009-03-09 05:48:07
回答 5查看 9.8K关注 0票数 10

我正在处理一个多人游戏,它需要一个消息队列(也就是说,消息进入,消息输出,没有重复或删除的消息,假设没有意外的缓存驱逐)。下面是我所知道的基于memcache的队列:

  • MemcacheQ:http://memcachedb.org/memcacheq/
  • Starling:http://rubyforge.org/projects/starling/
  • Depcached:http://www.marcworrell.com/article-2287-en.html
  • 麻雀:http://code.google.com/p/sparrow/

我从这篇博客文章中学习了memcache队列的概念。

所有消息都以整数作为键保存。有一个键具有下一个密钥,另一个密钥具有队列中最古老消息的密钥。为了访问这些,增量/减量方法被用作它的原子,因此有两个键充当锁。它们将递增,如果返回值为1时,则进程具有锁,否则它将继续递增。一旦进程完成,它将值设置为0。简单但有效。一个警告是,整数将溢出,因此一旦接近该限制,就有一些逻辑将使用的键设置为1。由于增量操作是原子操作,只有在使用两个或多个memcache(用于冗余)以保持这些存储保持同步时,才需要锁。

我的问题是,有一个基于memcache的消息队列服务可以运行在App上吗?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2009-03-09 07:21:59

以这种方式使用时,我会非常小心。你担心“意外的缓存驱逐”是对的。

Google期望您使用memcache来缓存数据,而不是存储数据。他们不保证将数据保存在缓存中。来自GAE文件

默认情况下,项目永远不会过期,但由于内存压力,项目可能会被逐出。

编辑:总是有Amazon的简单排队服务的。然而,这可能不符合价格/性能水平,因为:

  1. 从Google到Amazon服务器调用可能会有延迟。
  2. 你最终会为所有的数据流量支付两次--为它支付离开谷歌的费用,然后再为它支付进入亚马逊的费用。
票数 9
EN

Stack Overflow用户

发布于 2009-04-24 08:04:31

我已经启动了一个简单的Python队列,它可能很有用:http://bitbucket.org/epoz/python-memcache-queue/

票数 4
EN

Stack Overflow用户

发布于 2009-03-09 10:06:45

如果你对丢失数据的可能性很满意,那就去做吧。不过,请记住,虽然memcache通常比数据存储具有更低的延迟,但如果您希望在单个元素上执行高速率的原子操作,则它将受到影响。这不是一个数据存储问题,它只是一个必须序列化访问的问题。

如果不能做到这一点,亚马逊的SQS似乎是一个可行的选择。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/625146

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档