Heim  >  Artikel  >  Datenbank  >  Der Unterschied zwischen Jedis und Redistemplate

Der Unterschied zwischen Jedis und Redistemplate

(*-*)浩
(*-*)浩Original
2019-11-22 14:46:018472Durchsuche

Der Unterschied zwischen Jedis und Redistemplate

Jedis ist der offiziell empfohlene Java-orientierte Client für den Betrieb von Redis, und RedisTemplate ist eine Kapselung von JedisApi auf hoher Ebene in SpringDataRedis.

Beim Verwenden von nativen Jedis und Springs redisTemplate zum Aufrufen des Verbindungspools habe ich einen großen Unterschied festgestellt: Redis-Konfiguration:

  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 Unit-Test:

  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);
  }

redisTemplate-Unit-Test:

  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);
  }

Aktualitätsvergleich:

Fazit: Die Effizienz nativer Jedis ist besser als die von redisTemplate. Darüber hinaus stellte der Test fest, dass 100 Anfragen verwendet wurden und jedes Mal keine Geschäftsvorgänge ausgeführt wurden. Redis hielt jedoch nur wenige Verbindungen aufrecht , werden Sie feststellen, dass Redis weiterhin den konfigurierten Verbindungspool für mehr als 50 Verbindungen verwaltet.

Da es sich um einen einzelnen Thread handelt, scheint er nach Abschluss der letzten Jedis-Ausführung nicht geschlossen zu sein, und der nächste Aufruf weist keine inaktive Verbindung zu, sondern öffnet eine neue Verbindung, bis die Mindestanzahl erreicht ist Verbindungen sind gesättigt und weisen dann dem nächsten eine leere inaktive Verbindung zu (es liegt auf der Hand, dass ein einzelner Thread sicherstellen sollte, dass bei einem neuen Aufruf der vorherige vollständig inaktiv ist, sodass keine neuen Verbindungen geöffnet werden). Der konkrete Grund ist noch unklar, er hängt möglicherweise mit dem Prinzip des Thread-Pools zusammen. Der Unterschied zwischen Jedis und RedistemplateWeitere technische Artikel zum Thema Redis finden Sie in der Spalte Einführung in das Redis-Datenbanknutzungs-Tutorial

, um mehr zu erfahren!

Das obige ist der detaillierte Inhalt vonDer Unterschied zwischen Jedis und Redistemplate. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn