2015-10-02 4 views
1

Возможно ли реализовать очередь FIFO с memcached?Очередь FIFO через backcache memcache

Я нашел рецепт для redis

Насколько я знаю Memcached не перечислить типа. Метод memcached append() выглядит очень простым.

Возможно ли реализовать FIFO с memcached?

+0

ничего нельзя, но зачем беспокоиться? Redis бьет memcached во многих разных аспектах, и поскольку вы уже обнаружили, что одна из них имеет очередь – e4c5

+0

@ e4c5, если «no» является ответом на «Возможно ли реализовать очередь FIFO с memcached?». Тогда, пожалуйста, напишите ответ. Я соглашусь, проголосую и даю вам щедрость. Кстати, я изменил «возможный» на «правдоподобный». Правильно ли слово «правдоподобно»? – guettli

ответ

2

Возможно ли реализовать очередь FIFO с memcached? Да. Практически нет. Ниже приведена очень простая реализация с помощью 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

Я не хочу доказывать, что это практично. Поскольку я прокомментировал этот вопрос, моя рекомендация - использовать redis. Это просто доказательство концептуального ответа на вопрос, правдоподобно ли это. Я не собирался писать полноценную библиотеку здесь. – e4c5

+1

Также утечка не является проблемой, memcache очищает истекшие ключи на своем собственном. Вы должны больше заботиться о ключах, которые находятся в той части очереди, которая нас интересует, истекших и очищенных. – e4c5

Смежные вопросы