Maison  >  Article  >  base de données  >  La différence entre Jedis et Redistemplate

La différence entre Jedis et Redistemplate

(*-*)浩
(*-*)浩original
2019-11-22 14:46:018390parcourir

La différence entre Jedis et Redistemplate

Jedis est le client orienté Java officiellement recommandé pour faire fonctionner Redis, et RedisTemplate est une encapsulation de haut niveau de JedisApi dans SpringDataRedis.

En utilisant les jedis natifs et le redisTemplate de Spring pour appeler le pool de connexions, j'ai trouvé une énorme différence : configuration redis :

  redis:
    database: 0
    host: 127.0.0.1
    port: 6379
    password: 123456
    timeout: 5000
    lettuce:
      shutdown-timeout: 200
      pool:
        max-active: 500
        max-idle: 100
        min-idle: 50
        max-wait: 2000

jedis test unitaire :

  public void testJedis() throws IOException {
    GreExam greExam = new GreExam();
    greExam.setId(997);
    String greExamStr = JacksonUtil.bean2Json(greExam);
 
    long time = 0;
    for (int i = 0; i < 100; i++) {
      try (Jedis jedis = jedisPool.getResource()) {
        // 1、推送
        long time1 = System.currentTimeMillis();
        jedis.lpush("jedis-mq", greExamStr);
        // 2、接收
        String msg = jedis.brpoplpush("jedis-mq", "jedis-mq_bak", 0);
        jedis.lrem("jedis-mq_bak", 1, msg);
        long time2 = System.currentTimeMillis();
        time += time2 - time1;
      } catch (Exception e) {
        e.printStackTrace();
      }
    }
    System.out.println("总时间:" + time);
  }

test unitaire redisTemplate :

  public void testRedisTemplate() throws IOException {
    GreExam greExam = new GreExam();
    greExam.setId(997);
    String greExamStr = JacksonUtil.bean2Json(greExam);
    long time = 0;
    for (int i = 0; i < 100; i++) {
      // 1、推送
      long time1 = System.currentTimeMillis();
      redisTemplate.opsForList().leftPush("redisTemplate-mq", greExamStr);
      // 2、接收
      String msg = (String) redisTemplate.opsForList().rightPopAndLeftPush(
          "redisTemplate-mq", "redisTemplate-mq_bak", 1, TimeUnit.SECONDS);
      redisTemplate.opsForList().remove("redisTemplate-mq_bak", 1, msg);
      long time2 = System.currentTimeMillis();
      time += time2 - time1;
    }
    System.out.println("总时间:" + time);
  }

Comparaison des délais :

Conclusion : L'efficacité des jedis natifs est meilleure que celle de redisTemplate. De plus, le test a révélé que 100 requêtes ont été utilisées et qu'aucune opération commerciale n'a été effectuée à chaque fois. La vitesse d'exécution était très rapide. Cependant, si vous ajoutez votre propre traitement métier ou si vous dormez pendant quelques secondes, Redis ne maintient que quelques connexions. , vous constaterez que Redis continue de maintenir un pool de connexions configuré pour plus de 50 connexions.

Comme il s'agit d'un seul thread, une fois la dernière exécution de Jedis terminée, il semble qu'il ne soit pas fermé, et l'appel suivant n'alloue pas de connexion inactive, mais ouvre une nouvelle connexion jusqu'au nombre minimum de les connexions sont saturées, puis alloue une connexion inactive vide à la suivante (il va de soi qu'un seul thread doit garantir que lorsqu'un nouvel appel est effectué, le précédent est complètement inactif, donc aucune nouvelle connexion ne sera ouverte). La raison précise est encore incertaine. Elle peut être liée au principe du pool de threads. La différence entre Jedis et RedistemplatePour plus d'articles techniques liés à Redis, veuillez visiter la colonne Introduction au didacticiel d'utilisation de la base de données Redis

pour apprendre !

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn