redis单个请求与批量操作对比
Redis是一种基于客户端-服务端模型以及请求/响应协议的TCP服务。
这意味着通常情况下一个请求会遵循以下步骤:
● 客户端向服务端发送一个查询请求,并监听Socket返回,通常是以阻塞模式,等待服务端响应。
● 服务端处理命令,并将结果返回给客户端。
所以在大批量操作数据时,很容易消耗IO,导致代码性能差,执行时间长。
Redis 管道技术可以在服务端未响应时,客户端可以继续向服务端发送请求,并最终一次性读取所有服务端的响应。请求流程对比如下图:
管道的特点
pipeline并不是原子性的,中间可能会存在部分失败的情况,也就是说不能保证每条命令都能执行成功,这个是需要注意的,如果需要每条命令都执行成功,我们在批量执行过程中需要监控执行数量和返回的成功数量是否一致。
同时,当一次性进行大量的数据批量操作时,由于数据量过大,导致redis执行超时或其他的情况,所以这块最好事先测试自己的数据大小,决定多少数据适合批量一次性操作,类似采用分页批量操作。
管道适用场景
pipeline适合于什么样的场景使用呢?一般是对业务场景不需要实时性和准确性的系统,保证大部分操作成功即可。如果想让操作一定成功,需要一定检测和补偿机制,这里补偿机制一般是根据批量操作的返回的状态和成功数量和批量操作的对比来进行补偿,如果有部分失败,就转向单个redis请求操作,但是此处需要做好监控,避免批量全部失败,降级为单个执行,这样性能损耗将更大,这是需要极度避免的。