首页 > 编程知识 正文

jedis和lettuce的区别,jedis连接redis集群

时间:2023-05-05 20:22:09 阅读:178946 作者:1228

通常,在Redis客户端请求后,通常会阻止并等待Redis服务器端的处理,然后在Redis服务器端处理完毕并请求命令后,通过响应消息将结果返回给客户端。 这类似于HBase的扫描。 通常,客户端获取每个记录是由RPC调用服务器端。 Redis中有类似HBase Scanner Caching的东西吗? 是否一次返回多条记录? 是的,这就是Pipline。 官方会介绍http://redis.io/topics/pipe lining。

在pipeline方式下进行大量操作时,可以节省大量浪费在网络延迟上的时间。 需要注意的是,我们以pipeline方式打包并发送命令。 redis必须先缓存所有命令的处理结果,然后才能处理所有命令。 打包的命令越多,缓存就占用的内存越多。 所以打包的命令并不是越多越好。

使用Pipeline,在Redis上大量读写时,性能得到了极大的提高。

我用Java做了测试:

import java.util.HashMap; import java.util.Map; import java.util.Set; import redis.clients.jedis.jedis; import redis.clients.jedis.pipeline; import redis.clients.jedis.response; 公共类别测试(publicstaticvoidmain (string [ ] args ) throwsexception ) Jedisredis=newJedis(127.0.0.1 ),63777 redis.select(8); redis.flushDB (; //hmsetlongstart=system.current time millis (; //直接与hmsetfor(intI=0; i 10000; I({data.clear ); DATA.put('k_'I,' v_' i ); redis.hmset(key_I,data ); } longend=system.current time millis (; system.out.println (' dbsize : [ ' redis.dbsize () ] . ); system.out.println (hmsetwithoutpipelineused (() ) (end-start ) ) ) ) seconds . ); redis.select(8); redis.flushDB (; //pipelinehmsetpipelinep=redis.pipelined (; start=System.currentTimeMillis (; for(intI=0; i 10000; I({data.clear ); DATA.put('k_'I,' v_' i ); p.hmset('key_'I,data ); (} p.sync ); end=System.currentTimeMillis (; system.out.println (' dbsize : [ ' redis.dbsize () ] . ); system.out.println (hmsetwithpipelineused () () ) (end-start ) ) ) ) seconds . ); //hmgetsetkeys=redis.keys('* '; //jedishgetallstart=system.current time millis (; MapString,MapString,String result=new HashMapString,MapString,String (; 字符串密钥:密钥(for ) result.put (key,redis.Hgetall )密钥); } end=System.currentTimeMillis (; system.out.println (' resultsize : (' result.size ) () () ); system.out.println (hgetallwithoutpipelineused (() ) (end-start ) ) ) ) seconds . ); pipeline hgetall MapString,ResponseMapString,string responses=newhashmapstring,ResponseMapString,string(result.clear ) start=System.currentTimeMillis (; for(stringkey:keys ) responses.put (key,p.Hgetall ) key ); (} p.sync ); stringk : responses.keyset () result.put,responses.get(k ) k ).get ); } end=System.currentTimeMillis (; system.out.println (' resultsize : (' result.size ) () () ); system.out.println (hgetallwithpipelineused () ) (end-start )/1000 ) ) ) seconds . ); redis.disconnect (; }

//测试结果:

用pipeline统一读写10000条记录,小菜一碟,秒钟就结束。

dbsize:[10000] .

hmsetwithoutpipelineused [ 243 ] seconds .

dbsize:[10000] .

hmsetwithpipelineused [0] seconds .

result size:[10000] .

hgetallwithoutpipelineused [ 243 ] seconds .

result size:[10000] .

hgetallwithpipelineused [0] seconds .

//测试结果2 (外联网) )。

dbsize:[10000] .

hmsetwithoutpipelineused [ 653 ] seconds .

dbsize:[10000] .

hmsetwithpipelineused [1] seconds .

result size:[10000] .

hgetallwithoutpipelineused [ 680 ] seconds .

result size:[10000] .

hgetallwithpipelineused [1] seconds .

转载于:https://www.cn blogs.com/panchanggui/p/9848563.html

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。