我一直在使用 pyredis 中的 Redis 管道(一组操作批量运行以降低单个操作的套接字 i/o 成本)。
有时我的管道变得非常大并且积累了太多的 RAM,所以当给定的管道已经积累了 N 个操作时,我想执行该pipeline.execute()
方法来运行存储在管道中的操作。
这就提出了一个问题:如何衡量 Redis 管道中的操作数量?我知道我可以存储一个计数器变量,但更愿意只查询管道以确定其中有多少操作。其他人可以在这个问题上提供的任何帮助都将非常有帮助!
是的,您可以使用len(pipeline)
来获取操作数。在 redis-py/client.py 中有一个 class 的定义BasePipeline
,它实现了__len__
方法:获取它的 command_stack 的长度,它记录了所有通过管道传输的命令。
def __len__(self):
return len(self.command_stack)
例如
>>> 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