注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

逍遥子 曰:

得失失得 何必患得患失 舍得得舍 不妨不舍不得

 
 
 

日志

 
 

[原] jedis使用pipline的方法  

2014-12-17 14:49:51|  分类: JAVA |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
在集中操作redis的地方,使用jedis的pipline的功能能够极大地提升效率,普通的redis操作形式都是下面这种:
client    ---request1---> redis
client    <---response1-- redis
client    ---request2---> redis
client    <---response2-- redis
......
client    ---requestn---> redis
client    <---responsen-- redis

可见有几次请求便有几对网络通信,使用pipline之后,其工作形式为:
client    ---request1、request2...requestn---> redis
client    <---response1、response2、response3-- redis

无论有多少次网络请求,只有一对网络通信,因此,在有大批量的redis请求时,通过pipline的方式可以大大缩短网络通信时间;使用jedis的pipline的方法如下所示:
下面的步骤中所使用到的m_jedisPool是jedis连接池,类型为JedisPool
//1.从jedis连接池中拿到一个连接

Jedis jds = m_jedisPool.getResource();
//2.获取jedis的pipline
Pipeline pipline = jds.pipelined();

//3.使用pipline批量发送操作
//(1)向pipline中加入一个get操作,获取key1对应的value
pipline.get(key1);
//(2)向pipline中加入一个zrevrange操作,获取sortedset中key2的所有值
pipline.zrevrange(key2, 0, -1);
//(3)向pipline中加入一个hgetAll操作,获取hash表中key2的所有值
pipline.hgetAll(key2);


//4.获取pipline中批量操作的结果,向pipline中加入几个操作就会返回几个对象,如果某个结果为空,则该项对应的结果就是null
List<Object> piplineRes = pipline.syncAndReturnAll();


//5.处理pipline返回的结果
//(1)处理第1个get操作返回的结果,这个结果如果存在肯定是个String
if(piplineRes.get(0) != null && (piplineRes.get(0) instanceof String))
{
//处理pipline返回的第一个操作的结果
}

//(2)处理第2个zrevrange操作返回的结果,zrevrange操作返回的结果如果存在肯定是个Set类型
if (piplineRes.get(1) != null && (piplineRes.get(1) instanceof Set))
{
//处理pipline返回的第2个操作的结果
}

//(3)处理第3个zrevrange操作返回的结果,hgetAll操作返回的结果如果存在肯定是个Map类型
if (piplineRes.get(2) != null && (piplineRes.get(2) instanceof Map))
{
//处理pipline返回的第3个操作的结果
}



  评论这张
 
阅读(1016)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017