English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Технология каналов Redis

Redis - это TCP-сервис, основанный на модели клиент-сервер и протоколе запрос-ответ. Это означает, что обычно один запрос следует следующим шагам:

  • Клиент отправляет запрос на сервер и прослушивает Socket, обычно в блокирующем режиме, ожидая ответа сервера.

  • Сервер обрабатывает команды и возвращает результаты клиенту.

Технология каналов Redis

Технология Redis-канала позволяет клиенту продолжать отправлять запросы на сервер, когда сервер не отвечает, и в конечном итоге читать все ответы сервера一次性.

Онлайн пример

Чтобы проверить Redis-канал, нужно запустить пример Redis и ввести следующие команды:

$(echo -en "PING\r\nSET w3codeboxkey redis\r\nGET w3codeboxkey\r\nINCR visitor\r\nINCR visitor\r\nINCR visitor\r\n"; sleep 10) | nc localhost 6379
+PONG
+OK
redis
:1
:2
:3

В вышеуказанных примерах мы используем: PING Команда для проверки доступности Redis-сервиса: Затем мы установили значение w3codeboxkey в Redis, затем мы получили значение w3codeboxkey и увеличили visitor на 3 раза.

В возвращенных результатах мы можем увидеть, что эти команды一次性 передаются в Redis-сервис, и в конечном итоге все ответы сервера читаются一次性.

Преимущества технологии管道

Наиболее значительным преимуществом технологии管道 является повышение производительности услуги Redis.

Некоторые тестовые данные

В следующих тестах мы будем использовать Ruby-клиент Redis, поддерживающий функциональность管道, чтобы проверить, как улучшает производительность технология管道.

require 'rubygems' 
require 'redis'
def bench(descr) 
start = Time.now 
yield 
puts "#{descr} #{Time.now-start} секунд" 
end
def without_pipelining 
r = Redis.new 
10000.times { 
    r.ping 
} 
end
def with_pipelining 
r = Redis.new 
r.pipelined { 
    10000.times { 
        r.ping 
    } 
} 
end
bench("without pipeline") { 
    without_pipelining 
} 
bench("with pipeline") { 
    with_pipelining 
}

Данные, полученные при выполнении этого простого скрипта на системе Mac OS X в локальной сети, показывают, что после включения管道 операций, время ожидания значительно уменьшилось.

без pipeline 1.185238 секунд 
с pipeline 0.250783 секунд

Как вы видите, после включения канала, наша скорость увеличилась в 5 раз.