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