当前位置:Gxlcms > mysql > 多种方式测试redis入库性能

多种方式测试redis入库性能

时间:2021-07-01 10:21:17 帮助过:40人阅读

? ? Transaction Pipeline 耗时(s) 测试一: N N 311 测试二: N Y 10 测试三: Y Y 7 测试四: Y N 10 ? 结论:Pipeline + Transaction方式是几种插入方式中性能最好的。虽然有点意外,但测试多次仍然是这个结论。 ? 测试代码如下: ? import org.apache.

?

? Transaction Pipeline 耗时(s)
测试一: N N 311
测试二: N Y 10
测试三: Y Y 7
测试四: Y N 10

?

结论:Pipeline + Transaction方式是几种插入方式中性能最好的。虽然有点意外,但测试多次仍然是这个结论。

?

测试代码如下:

?

  1. import org.apache.commons.lang.RandomStringUtils;
  2. import redis.clients.jedis.Jedis;
  3. import redis.clients.jedis.JedisPool;
  4. import redis.clients.jedis.JedisPoolConfig;
  5. import redis.clients.jedis.Pipeline;
  6. import redis.clients.jedis.Transaction;
  7. public class RedisTransactionTest {
  8. private static String host = "xx.xx.xx.xx";
  9. private static JedisPool pool = new JedisPool(new JedisPoolConfig(), host);
  10. private long rowCount = 1000000; // 100万
  11. public static void main(String[] args) {
  12. long start = System.currentTimeMillis();
  13. new RedisTransactionTest().noTransactionNoPipeline();
  14. System.out.println("noTransactionNoPipeline use " + (System.currentTimeMillis() - start) / 1000);
  15. pool = new JedisPool(new JedisPoolConfig(), host);
  16. start = System.currentTimeMillis();
  17. new RedisTransactionTest().pipelineWithoutTransaction();
  18. System.out.println("pipelineWithoutTransaction use " + (System.currentTimeMillis() - start) / 1000);
  19. pool = new JedisPool(new JedisPoolConfig(), host);
  20. start = System.currentTimeMillis();
  21. new RedisTransactionTest().pipelineWithTransaction();
  22. System.out.println("pipelineWithTransaction use " + (System.currentTimeMillis() - start) / 1000);
  23. pool = new JedisPool(new JedisPoolConfig(), host);
  24. start = System.currentTimeMillis();
  25. new RedisTransactionTest().transactionNoPipeline();
  26. System.out.println("transactionNoPipeline use " + (System.currentTimeMillis() - start) / 1000);
  27. }
  28. public void pipelineWithoutTransaction() {
  29. Jedis jedis = pool.getResource();
  30. try {
  31. Pipeline p = jedis.pipelined();
  32. for (int i = 0; i < rowCount; i++) {
  33. String key = RandomStringUtils.randomAlphabetic(8);
  34. p.set(key, RandomStringUtils.randomNumeric(5));
  35. p.expire(key, 5 * 60);
  36. }
  37. p.sync();
  38. } catch (Exception e) {
  39. pool.returnResource(jedis);
  40. }
  41. }
  42. public void pipelineWithTransaction() {
  43. Jedis jedis = pool.getResource();
  44. try {
  45. Pipeline p = jedis.pipelined();
  46. p.multi();
  47. for (int i = 0; i < rowCount; i++) {
  48. String key = RandomStringUtils.randomAlphabetic(8);
  49. p.set(key, RandomStringUtils.randomNumeric(5));
  50. p.expire(key, 5 * 60);
  51. }
  52. p.exec();
  53. p.sync();
  54. } catch (Exception e) {
  55. pool.returnResource(jedis);
  56. }
  57. }
  58. public void noTransactionNoPipeline() {
  59. Jedis jedis = pool.getResource();
  60. try {
  61. for (int i = 0; i < rowCount; i++) {
  62. String key = RandomStringUtils.randomAlphabetic(8);
  63. jedis.set(key, RandomStringUtils.randomNumeric(5));
  64. jedis.expire(key, 5 * 60);
  65. }
  66. } catch (Exception e) {
  67. pool.returnResource(jedis);
  68. }
  69. }
  70. public void transactionNoPipeline() {
  71. Jedis jedis = pool.getResource();
  72. try {
  73. Transaction tx = jedis.multi();
  74. for (int i = 0; i < rowCount; i++) {
  75. String key = RandomStringUtils.randomAlphabetic(8);
  76. tx.set(key, RandomStringUtils.randomNumeric(5));
  77. tx.expire(key, 5 * 60);
  78. }
  79. tx.exec();
  80. } catch (Exception e) {
  81. pool.returnResource(jedis);
  82. }
  83. }
  84. }

?--end

?

?



已有 0 人发表留言,猛击->> 这里<<-参与讨论


ITeye推荐
  • —软件人才免语言低担保 赴美带薪读研!—



人气教程排行