Maison > base de données > Redis > le corps du texte

La différence entre Jedis et Redistemplate

(*-*)浩
Libérer: 2019-11-22 14:46:01
original
8466 Les gens l'ont consulté

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
Copier après la connexion

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);
  }
Copier après la connexion

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);
  }
Copier après la connexion

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!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!