Redis管道技术

(1) Redis是基于请求/响应协议的TCP服务。在客户端向服务器发送一个查询求其后,需要监听Socket的返回,该监听过程一直阻塞,直到服务器有结果返回。由于Redis集群是部署在多个服务器上的,所以Redis的请求/响应模型在每次请求时都要跨网络在不同服务器之间传输,这样每次查询都纯在一个网络延迟(服务器之间的网络延迟一般在 20ms 左右)。由于服务器一般都采用多线程处理业务,并且内存操作的效率很高,所以如果一次请求延迟 20ms ,则多次请求的网络延迟会不断累加。也就是说,在分布式环境下,Redis的性能瓶颈主要体现在网络延迟上。Redis 请求/响应模型的数据请求,响应如下图所示:

(2)Redis 的管道技术在 "服务器未响应时" , 客户端可以继续向服务器发送请求,并最终一次性读取所有服务端的响应。管道技术能减少客户端和服务器交互的次数,将客户端的请求批量发送给服务器,服务器针对批量数据分别查询并统一回复,能显著提高Redis的性能。Redis管道模型的数据请求流程如下图:

  

 (3) Redis管道技术基于Spring Boot的使用如下:

  

// Redis Pipeline 执行批量操作,将操作结果返回在list中

List<Object> list = redisTemplate.executePipelined(

    new RedisCallback<Object>(){
     @Nullable
     @Override
     public Object doInRedis(RedisConnection connect) throws DataAccessException {
           connection.openPipeline(); // 打开Pipeline
           
           for(int i =0;i<10000;i++){
               String kye = "key_" + i;
               String value = "value_" + i;
               connection.set(key.getBytes(),value,getBytes());
           }
           return null; // 结果返回,这里返回null,
                        // redisTemplate会将最终结果汇总在外层的List中
   
     }

});

// 查看管道批量操作返回的结果
for (Object item: list){
    System.out.println(item);
}

以上伪代码使用redisTemplate.executePipelined()在Spring Boot中实现了基于Redis的管道操作,具体的步骤为: 新建RedisCallback对象并覆写doInRedis();在doInRedis()中通过connection.openPipeline()开启Pipeline操作;在for循环早批量进行Redis数据写操作,最终将批量操作结果返回;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值