2015-01-15 2 views

ответ

5

Ваш подход действителен, но неэффективен - вы будете делать много ненужных запросов, теряя при этом процессор, пропускную способность и время. Если у вашего lst есть N элементов, для вашего цикла потребуется N + 1 вызовов для повтора, из которых N вызовов будут равны LINDEX, сложность которых O (N).

Redis предлагает лучший способ сделать это с помощью команды LRANGE, так что вы можете в основном заменить все вызовы Redis с помощью одного вызова к нему, likeso:

l = redis_server.lrange('lst', 0, -1) 
for x in l: 
    print x 

Примечание, однако, что делает это с большие списки также проблематичны, потому что вы будете блокировать Redis, пока он готовит ответ на запрос LRANGE (+ память для хранения буфера ответа). В таких случаях вам следует использовать шаблон круглого списка с RPOPLPUSH по адресу lst или его копию с учетом или без учета параллелизма.

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