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

Redis 파이프라인 기술

Redis는 클라이언트 기반-서버 모델 및 요청/응답 프로토콜의 TCP 서비스입니다. 이는 일반적으로 하나의 요청이 다음 단계를 따릅니다:

  • 클라이언트는 서버에 쿼리 요청을 보내고, 소켓에서 반환을 기다리며, 일반적으로 블록 모드로 서버 응답을 기다립니다.

  • 서버는 명령어를 처리하고 결과를 클라이언트에게 반환합니다.

Redis 파이프라인 기술

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배.