确定 Redis Pipeline 中的操作数

duh*_*ime 1 redis redis-py

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

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

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

Gua*_*Zuo 5

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

def __len__(self):
    return len(self.command_stack)
Run Code Online (Sandbox Code Playgroud)

例如

>>> 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
Run Code Online (Sandbox Code Playgroud)