Redis-Cli中的时序查询?

时间:2013-08-08 19:11:01

标签: redis

这看起来应该是微不足道的,但是我想通过redis-cli运行查询,然后回过头来查看服务器上的时间以及结果。这仅用于调试目的,以解决客户端库或延迟问题。有没有办法做到这一点?

2 个答案:

答案 0 :(得分:10)

您可以通过在MULTI/EXEC块中调查redis命令来执行此操作,其中TIME命令在之前使用并且正确 你的命令之后。例如:

使用节点库:

var multi = redis.multi();
multi.time(); // start time
multi.sunionstore(['fast_food_joints', 'pizza_hut', 'taco_bell']); // this is the command I'm investigating
multi.time(); // end time
multi.exec(function(err, responses){
    var response = responses[1]; // the response i care about
    var start = (parseInt(responses[0][0]) * 1000) + (parseInt(responses[0][1]) / 1000);
    var end   = (parseInt(responses[2][0]) * 1000) + (parseInt(responses[2][1]) / 1000);            
    var execution_time = end - start; // in milliseconds
});

或者......使用命令行(这是你在问题中要求的):

192.168.1.1:6379> MULTI
OK
192.168.1.1:6379> TIME
QUEUED
192.168.1.1:6379> SUNIONSTORE fast_food_joints pizza_hut taco_bell
QUEUED
192.168.1.1:6379> TIME
QUEUED
192.168.1.1:6379> EXEC
1) 1) "1450818240"
   2) "666636"
2) (integer) 48886
3) 1) "1450818240"
   2) "666639"

然后自己做数学。上面的例子需要3微秒。

答案 1 :(得分:1)

您可以将慢速日志设置为0(零)。这样做会记录每个命令。

您将看到的时间以微秒为单位,此时从文档中可以看出:

  

执行时间不包括谈话等I / O操作   与客户,发送回复等,但只是时间   需要实际执行命令(这是唯一的阶段)   线程被阻塞而无法为其他线程服务的命令执行   同时请求

要考虑网络性能,您可能需要破解客户端库,在与redis通信之前和之后进行日志记录,而忽略您的库可能进行的任何转换。