Pour exécuter une commande Redis, le client Redis et le serveur Redis doivent effectuer les étapes suivantes :
Le client envoie la commande au serveur
Le serveur accepte la demande de commande et exécute la commande, produit les résultats correspondants ;
Le serveur renvoie les résultats au client
Le client accepte les résultats de l'exécution de la commande et les affiche à l'utilisateur ;
La plupart du temps consommé par la commande Redis est consacré à l'envoi de requêtes de commande et à la réception des résultats de commande, à regrouper un nombre quelconque de requêtes de commande Redis, puis à les envoyer toutes au serveur en même temps, et au serveur Après toute commande les demandes sont traitées, tous les résultats de leur exécution seront renvoyés au client en une seule fois.
Remarque :
Le serveur Redis ne limite pas le nombre de commandes incluses dans le pipeline par le client, mais il définit une limite de volume par défaut de 1 Go pour le tampon d'entrée du client : lorsque la quantité de données envoyées par le client dépasse cette limite. Lorsque la limite est atteinte, le serveur Redis fermera de force le client. Par conséquent, il est préférable de ne pas exécuter simultanément un grand nombre de commandes ou des commandes très volumineuses dans le même pipeline.
De plus, de nombreux clients ont également des limites implicites de taille de tampon. Si vous constatez que certaines commandes de pipeline ne sont pas exécutées lors de l'utilisation de la fonctionnalité de pipeline, ou si les résultats renvoyés par le pipeline sont incomplets, il est possible que votre programme ait atteint le niveau requis. limite de taille de tampon intégrée du client.
Instance Redis intégrée SpringBoot
Utilisez une seule commande d'incrémentation pour traiter 2 millions de clés :
public class RedisPipelineStudy extends BaseTest { @Autowired private StringRedisTemplate stringRedisTemplate; private static final String PREFIX = "test0:"; @Test public void test() { StopWatch stopWatch = new StopWatch(); stopWatch.start("test0"); for (int times = 0; times <p>La consommation de temps est la suivante : 12 bits, unité ns<br></p><p><img src="https://img.php.cn/upload/article/000/887/227/168540959894676.png" alt="Comment implémenter des pipelines en intégrant Redis dans SpringBoot"></p><p> Utilisation le tube incrBy pour traiter 2 millions de clés, et empaqueter 300 commandes à chaque fois et les envoyer au serveur, comme indiqué ci-dessous : </p><pre class="brush:php;toolbar:false">public class RedisPipelineStudy extends BaseTest { @Autowired private StringRedisTemplate stringRedisTemplate; private static final String PREFIX = "test1:"; @Test public void test() { StopWatch stopWatch = new StopWatch(); stopWatch.start("test1"); List<integer> recordList = new ArrayList(); for (int times = 0; times 300) { incrByPipeline(recordList); recordList = new ArrayList(); } } catch (Exception e) { System.out.println(e); } } if (!CollectionUtils.isEmpty(recordList)) { incrByPipeline(recordList); recordList = new ArrayList(); } } stopWatch.stop(); System.out.println(stopWatch.prettyPrint()); } private void incrByPipeline(List<integer> recordList) { stringRedisTemplate.executePipelined(new RedisCallback<object>() { @Override public Object doInRedis(RedisConnection connection) throws DataAccessException { try { for (Integer record : recordList) { byte[] key = (PREFIX + record).getBytes(); connection.incrBy(key, 1); } } catch (Exception e) { System.out.println(e); } return null; } }); } }</object></integer></integer>
Temps consommé : 11 bits, unité : ns, soit 1/6 du temps pris par un commande unique.
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!