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. Weitere 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!