Pipeline examples#

This example show quickly how to use pipelines in redis-py.

Checking that Redis is running#

[1]:
import redis

r = redis.Redis(decode_responses=True)
r.ping()
[1]:
True

Simple example#

Creating a pipeline instance#

[2]:
pipe = r.pipeline()

Adding commands to the pipeline#

[3]:
pipe.set("a", "a value")
pipe.set("b", "b value")

pipe.get("a")
[3]:
Pipeline<ConnectionPool<Connection<host=localhost,port=6379,db=0>>>

Executing the pipeline#

[4]:
pipe.execute()
[4]:
[True, True, 'a value']

The responses of the three commands are stored in a list. In the above example, the two first boolean indicates that the the set commands were successfull and the last element of the list is the result of the get("a") comand.

Chained call#

The same result as above can be obtained in one line of code by chaining the opperations.

[5]:
pipe = r.pipeline()
pipe.set("a", "a value").set("b", "b value").get("a").execute()
[5]:
[True, True, 'a value']

Performance comparison#

Using pipelines can improve performance, for more informations, see Redis documentation about pipelining. Here is a simple comparison test of performance between basic and pipelined commands (we simply increment a value and measure the time taken by both method).

[6]:
from datetime import datetime

incr_value = 100000

Without pipeline#

[7]:
r.set("incr_key", "0")

start = datetime.now()

for _ in range(incr_value):
    r.incr("incr_key")
res_without_pipeline = r.get("incr_key")

time_without_pipeline = (datetime.now() - start).total_seconds()
[8]:
print("Without pipeline")
print("================")
print("Time taken: ", time_without_pipeline)
print("Increment value: ", res_without_pipeline)
Without pipeline
================
Time taken:  21.759733
Increment value:  100000

With pipeline#

[9]:
r.set("incr_key", "0")

start = datetime.now()

pipe = r.pipeline()
for _ in range(incr_value):
    pipe.incr("incr_key")
pipe.get("incr_key")
res_with_pipeline = pipe.execute()[-1]

time_with_pipeline = (datetime.now() - start).total_seconds()
[10]:
print("With pipeline")
print("=============")
print("Time taken: ", time_with_pipeline)
print("Increment value: ", res_with_pipeline)
With pipeline
=============
Time taken:  2.357863
Increment value:  100000

Using pipelines provides the same result in much less time.