FIFO队列通过memcache后端

时间:2015-10-02 09:08:43

标签: memcached fifo

使用memcached实现FIFO队列是否合理?

我找到了redis

的食谱

据我所知,memcached没有列表类型。 memcached的append()方法看起来很基本。

使用memcached实现FIFO是否合理?

2 个答案:

答案 0 :(得分:2)

使用memcached实现FIFO队列是否合理? 即可。是否实用。以下是python的一个非常基本的实现。

from pylibmc import Client


class Queue: 
    """A sample implementation of a First-In-First-Out
       data structure."""
    def __init__(self):
        self.in_ptr = 0
        self.out_ptr = 0
        self.client = Client(['/tmp/memcached.sock'])

    def push(self, obj):
        key = 'fifoq{0}'.format(self.in_ptr)
        self.client.add(key, obj)
        self.in_ptr += 1


    def pop(self):
        if self.in_ptr > self.out_ptr:
            key = 'fifoq{0}'.format(self.out_ptr)
            ret = self.client.get(key)
            self.out_ptr += 1

            return ret

        return None

这没有线程安全,不进行类型检查,也不会捕获任何异常。一旦你添加了这些功能,它将作为FIFO队列运行得相当好,但我不相信使用memcached是理想的解决方案。正如您已经发现自己redis已经具有此功能,它将更加强大和可扩展。

答案 1 :(得分:1)

否,因为您永远无法确定使用memcached时队列中将有大量数据可用。可以随时驱逐数据。