前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Redis的管道Pipeline

Redis的管道Pipeline

作者头像
爱撒谎的男孩
发布2019-12-31 15:05:37
1.5K0
发布2019-12-31 15:05:37
举报
文章被收录于专栏:码猿技术专栏码猿技术专栏

文章目录

  1. 1. Redis的管道(Pipeline)
    1. 1.1. 为什么使用管道
    2. 1.2. 客户端使用管道执行命令
      1. 1.2.1. API

Redis的管道(Pipeline)

为什么使用管道

  • 其中redis的执行一条命令可以分为四个步骤
    1. 发送命令
    2. 命令排队
    3. 命令执行
    4. 返回结果
  • 其中1-4之间所需要的时间称为往返时间(RTT)
  • Redis提供了批量操作命令(例如mgetmset等),有效地节约RTT。但 大部分命令是不支持批量操作的,例如要执行n次hgetall命令,并没有 mhgetall命令存在,需要消耗n次RTT。Redis的客户端和服务端可能部署在不 同的机器上。例如客户端在北京,Redis服务端在上海,两地直线距离约为 1300公里,那么1次RTT时间=1300×2/(300000×2/3)=13毫秒(光在真空中 传输速度为每秒30万公里,这里假设光纤为光速的2/3),那么客户端在1秒 内大约只能执行80次左右的命令,这个和Redis的高并发高吞吐特性背道而驰。
  • Pipeline(管道)机制能改善上面这类问题,它能将一组Redis命令进行组装,通过一次RTT传输给Redis,再将这组Redis命令的执行结果按顺序返回给客户端

客户端使用管道执行命令

  • 使用的是Jedis
  • 我们模拟批量删除所有的键,在redis中并没有提供这种方法,我们只能一个个的删除
代码语言:javascript
复制
@Test
public void testPipeline(){
	Jedis jedis=new Jedis("localhost", 6379);
	Pipeline pipeline=jedis.pipelined();  //获取管道连接对象
	Set<String> keys=jedis.keys("*");   //获取所有的key
	for (String key : keys) {
		pipeline.del(key);  //删除key,这里并不是真正的删除,只是将命令排入管道中
	}
	pipeline.sync();   //执行管道命令
}

API

  • 所有的命令都可以使用管道连接,只是通过Pipeline对象调用而已
  • pipeline.set() :添加字符串
  • pipeline.get() :获取字符串
  • pipeline.sync() : 执行管道命令,不返回其中命令执行的结果
  • pipeline.syncAndReturnAll() : 执行其中的命令,并且将每条命令执行的结果存在List中,我们可以接收并且输出查看
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018-06-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Redis的管道(Pipeline)
    • 为什么使用管道
      • 客户端使用管道执行命令
        • API
    相关产品与服务
    云数据库 Redis
    腾讯云数据库 Redis(TencentDB for Redis)是腾讯云打造的兼容 Redis 协议的缓存和存储服务。丰富的数据结构能帮助您完成不同类型的业务场景开发。支持主从热备,提供自动容灾切换、数据备份、故障迁移、实例监控、在线扩容、数据回档等全套的数据库服务。
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档