确定Redis管道中的操作数

时间:2017-09-05 00:12:16

标签: redis redis-py

我一直在使用Redis管道(批量运行以减少单个操作的套接字i / o成本)。

有时我的管道变得非常大并且积累了太多的RAM,所以当给定管道累积了N次操作时,我想执行pipeline.execute()方法来运行存储在管道中的操作。

这提出了一个问题:如何衡量Redis管道中的操作数量?我知道我可以存储一个计数器变量,但更愿意只查询管道以确定其中有多少操作。其他人可以在这个问题上提供的帮助将非常有帮助!

1 个答案:

答案 0 :(得分:3)

是的,您可以使用len(pipeline)来获取操作数量。在redis-py / client.py中,有一个类BasePipeline的定义,它实现了__len__方法:获取command_stack的长度,它记录了所有管道命令。

def __len__(self):
    return len(self.command_stack)

E.g。

>>> import redis
>>> redis = redis.StrictRedis()
>>> p = redis.pipeline()
>>> len(p)
0
>>> p.set('test',1)
StrictPipeline<ConnectionPool<Connection<host=localhost,port=6379,db=0>>>
>>> len(p)
1