English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Redis는 클라이언트 기반-서버 모델 및 요청/응답 프로토콜의 TCP 서비스입니다. 이는 일반적으로 하나의 요청이 다음 단계를 따릅니다:
클라이언트는 서버에 쿼리 요청을 보내고, 소켓에서 반환을 기다리며, 일반적으로 블록 모드로 서버 응답을 기다립니다.
서버는 명령어를 처리하고 결과를 클라이언트에게 반환합니다.
Redis 파이프라인 기술은 서버가 응답하지 않을 때 클라이언트가 서버에 요청을 계속 보내고, 결국 모든 서버 응답을 한 번에 읽을 수 있습니다.
Redis 파이프라인을 확인하려면, Redis 예제를 실행하고 다음 명령어를 입력하세요:
$(echo -en "PING\r\n SET 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 서비스가 사용 가능한지 확인하는 명령어를 실행합니다 그 후 w를 설정합니다3codeboxkey의 값이 redis라면 w를 가져옵니다3codeboxkey의 값을 가져오고 visitor를 증가시킵니다 3 번.
결과에서 볼 수 있듯이 이 명령어들은 한 번에 Redis 서비스에 제출되고, 결국 모든 서버 응답을 한 번에 읽습니다.
파이프라인 기술의 가장显著한 장점은 Redis 서비스의 성능을 향상시키는 것입니다.
아래의 테스트에서 우리는 Redis의 Ruby 클라이언트를 사용하여 파이프라인 기술 특성을 지원하는 테스트를 수행하여 파이프라인 기술이 속도에 미치는 영향을 테스트할 것입니다.
require 'rubygems' require 'redis' def bench(descr) start = Time.now yield puts "#{descr} #{Time.now-start} seconds" 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("pipelining 없음") { without_pipelining } bench("pipelining") { with_pipelining }
로컬 네트워크에 있는 Mac OS X 시스템에서 위의 간단한 스크립트를 실행한 데이터에 따르면, 파이프라인 작업을 켜면 양방향 지연이 매우 낮아졌음을 보여줍니다.
pipelining 없음 1.185238 seconds pipelining 0.250783 seconds
그렇게 보면 파이프라인을 켜면 우리의 속도와 효율성이 향상되었습니다5배.