我正在处理一个多人游戏,它需要一个消息队列(也就是说,消息进入,消息输出,没有重复或删除的消息,假设没有意外的缓存驱逐)。下面是我所知道的基于memcache的队列:
我从这篇博客文章中学习了memcache队列的概念。
所有消息都以整数作为键保存。有一个键具有下一个密钥,另一个密钥具有队列中最古老消息的密钥。为了访问这些,增量/减量方法被用作它的原子,因此有两个键充当锁。它们将递增,如果返回值为1时,则进程具有锁,否则它将继续递增。一旦进程完成,它将值设置为0。简单但有效。一个警告是,整数将溢出,因此一旦接近该限制,就有一些逻辑将使用的键设置为1。由于增量操作是原子操作,只有在使用两个或多个memcache(用于冗余)以保持这些存储保持同步时,才需要锁。
我的问题是,有一个基于memcache的消息队列服务可以运行在App上吗?
发布于 2009-03-09 07:21:59
以这种方式使用时,我会非常小心。你担心“意外的缓存驱逐”是对的。
Google期望您使用memcache来缓存数据,而不是存储数据。他们不保证将数据保存在缓存中。来自GAE文件
默认情况下,项目永远不会过期,但由于内存压力,项目可能会被逐出。
编辑:总是有Amazon的简单排队服务的。然而,这可能不符合价格/性能水平,因为:
发布于 2009-04-24 08:04:31
我已经启动了一个简单的Python队列,它可能很有用:http://bitbucket.org/epoz/python-memcache-queue/
发布于 2009-03-09 10:06:45
如果你对丢失数据的可能性很满意,那就去做吧。不过,请记住,虽然memcache通常比数据存储具有更低的延迟,但如果您希望在单个元素上执行高速率的原子操作,则它将受到影响。这不是一个数据存储问题,它只是一个必须序列化访问的问题。
如果不能做到这一点,亚马逊的SQS似乎是一个可行的选择。
https://stackoverflow.com/questions/625146
复制相似问题