我希望此列表适用于询问有关redis客户端“hiredis”的问题。 我想用redis客户端实现我在下面做的同样的事情。可以看出redis通过一次rpush调用发送3个不同的记录。
redis 127.0.0.1:6379> rpush test kemal erdem husyin
(integer) 3
redis 127.0.0.1:6379> lrange test 0 -1
1) "kemal"
2) "erdem"
3) "husyin"
在我的项目中,我使用hiredis作为例子:
reply = (redisReply*)(redisCommand(c, "RPUSH %s %s" , channelName, message));
但是现在我有一个大的日志文件,其中每一行都被保存在像char[][]
这样的buff中;
我需要将每一行作为不同的记录发送,但也需要调用rpush一次性能。你能给我一个建议吗?
答案 0 :(得分:2)
发送一个独特的命令推送超过几千个项目是一个坏主意。它会使通信缓冲区饱和,并且由于Redis的单线程特性,大型命令将阻止所有其他并发命令。
我建议通过批量n个项目的小数据包(n介于10和100之间)来构建推送命令,并将推送命令分组到pipeline个m命令(介于10和100之间)。
算法将是这样的:
While there are still lines to read:
New Redis pipeline, i=0
While there are still lines to read and i<m:
Read at most n lines
Build push command for the read lines
Pipeline push command
++i
Flush Redis pipeline, check return status if needed
它只会产生N /(n * m)往返(N是输入文件中的行数)。
要使用任意数量的参数构建命令,可以使用redisAppendCommandArgv函数。