redis使用Pipeline管道提升写入速度
redis使用Pipeline管道提升写入速度在单实例redis环境,我们可以采用Pipeline的方式写入数据,采用管道的方式将多个key值一起提交,较一个key值提交一次,减少了IO,速度会明显提升,下面是采用管道和不采用管道的方式比较执行10万次的,时间比较。1. package com.hxl;2.3. import java.util.LinkedHashSet;4. import java.util.Set;5.6. import redis.clients.jedis.BinaryJedis;7. import redis.clients.jedis.HostAndPort;8. import redis.clients.jedis.Jedis;9. import redis.clients.jedis.JedisCluster;10. import redis.clients.jedis.JedisPoolConfig;11.12. import redis.clients.jedis.Pipeline;13.14. public class PipelineTest 15.16. /*17. * 18. * param args19. */20.21. public static void main(String args) 22. int count = 100000;23. long start = System.currentTimeMillis();24. withoutPipeline(count);25. long end = System.currentTimeMillis();26. System.out.println("withoutPipeline: " + (end - start);27. start = System.currentTimeMillis();28. usePipeline(count);29. end = System.currentTimeMillis();30. System.out.println("usePipeline: " + (end - start);31. 32.33. private static void withoutPipeline(int count) 34. JedisPoolConfig poolConfig = new JedisPoolConfig();35. / 最大连接数36. poolConfig.setMaxTotal(1);37. / 最大空闲数38. poolConfig.setMaxIdle(1);39. / 最大允许等待时间,如果超过这个时间还未获取到连接,则会报JedisException异常:40. / Could not get a resource from the pool41. poolConfig.setMaxWaitMillis(1000);42. /Set nodes = new LinkedHashSet();43. /nodes.add(new HostAndPort("192.168.56.91", 6379);44. /nodes.add(new HostAndPort("192.168.56.91", 7379);45. /nodes.add(new HostAndPort("192.168.56.92", 6379);46. /nodes.add(new HostAndPort("192.168.56.92", 7379);47. /nodes.add(new HostAndPort("192.168.56.93", 6379);48. /nodes.add(new HostAndPort("192.168.56.93", 7379);49. /JedisCluster cluster = new JedisCluster(nodes, poolConfig);50. 51. Jedis jr = null;52. try 53. jr = new Jedis("192.168.56.91", 8379);54. for (int i = 0; i < count; i+) 55. jr.incr("age1");56. 57. catch (Exception e) 58. e.printStackTrace();59. 60. finally 61. if (jr != null) 62. jr.disconnect();63. 64. 65. 66.67. private static void usePipeline(int count) 68.69. JedisPoolConfig poolConfig = new JedisPoolConfig();70. / 最大连接数 www.44226.net71. poolConfig.setMaxTotal(1);72. / 最大空闲数73. poolConfig.setMaxIdle(1);74. / 最大允许等待时间,如果超过这个时间还未获取到连接,则会报JedisException异常:www.f-1.cc75. / Could not get a resource from the pool76. poolConfig.setMaxWaitMillis(1000);77. Set<HostAndPort> nodes = new LinkedHashSet<HostAndPort>();78. /nodes.add(new HostAndPort("192.168.56.91", 6379);79. /nodes.add(new HostAndPort("192.168.56.91", 7379);80. /nodes.add(new HostAndPort("192.168.56.92", 6379);81. /nodes.add(new HostAndPort("192.168.56.92", 7379);82. /nodes.add(new HostAndPort("192.168.56.93", 6379);83. /nodes.add(new HostAndPort("192.168.56.93", 7379);84. /JedisCluster cluster = new JedisCluster(nodes, poolConfig); www.letaoqpyx.com85. 86. 87. Jedis jr = null;88. try 89. jr = new Jedis("192.168.56.91",8379);90. 91. Pipeline pl = jr.pipelined();92. for (int i = 0; i < count; i+) 93. pl.incr("age2");94. 95. pl.sync();96. catch (Exception e) 97. e.printStackTrace();98. 99. finally 100. if (jr != null) 101. jr.disconnect();102. 103. 104. 105. 采用管道的消耗时间明显少很多: