Si l'on souhaite gérer la limite de concurrence sur la requête d'interface, ou faire une interception de sécurité pour éviter la fraude à la commande, par exemple, pour une requête d'interface, le nombre total de requêtes par seconde est limité à 200. Si le nombre dépasse 200, attendez et attendez. Une seconde, demandez à nouveau, ici un redis est utilisé comme mode de compteur à implémenter. Cet article vous présente principalement la méthode et le code associé de redis pour implémenter un compteur afin d'éviter les commandes frauduleuses. Il a une certaine valeur de référence et les amis dans le besoin peuvent en apprendre davantage.
Appelez la méthode redis :
Touche INCR
Augmentez de un la valeur numérique stockée dans la clé.
Si la clé n'existe pas, la valeur de la clé sera d'abord initialisée à 0, puis l'opération INCR sera effectuée.
Renvoie une erreur si la valeur contient le mauvais type, ou si une valeur de type chaîne ne peut pas être représentée sous forme de nombre.
Il s'agit d'une opération pour les chaînes. Étant donné que Redis n'a pas de type entier dédié, la chaîne stockée dans la clé est interprétée comme un entier décimal signé de 64 bits pour effectuer l'opération INCR.
code :
redis> SET test 20 OK redis> INCR test (integer) 21 redis> GET test # 数字值在 Redis 中以字符串的形式保存 "21"
Implémentation du compteur
Le compteur est l'atomicité de Redis Le Mode le plus intuitif pouvant être implémenté par une opération d'auto-incrémentation, son idée est assez simple : chaque fois qu'une opération se produit, envoyez une commande INCR à Redis.
Par exemple, dans une application Web, si vous souhaitez connaître le nombre de clics d'un utilisateur chaque jour pendant un an, il vous suffit d'utiliser l'ID utilisateur et les informations de date associées comme clés, et d'exécuter à chaque fois l'utilisateur clique sur la page. Une seule opération d'auto-incrémentation suffit.
Par exemple, si le nom d'utilisateur est peter et que l'heure du clic est le 22 mars 2012, exécutez la commande INCR peter::2012.3.22.
$redisKey = “api_name_” + $api; $count = $this->redis->incr($redisKey); if ($count == 1) { //设置有效期一s $this->redis->expire($redisKey,1);//设置一s的过期时间 } if (count > 200) {//防止刷单的安全拦截 return false;//超过就返回false } //后续处理
Cela implémente simplement l'application du compteur redis, et il existe également les méthodes suivantes :
Il existe plusieurs façons d'étendre ce modèle simple :
Vous pouvez utiliser INCR et EXPIRE en combinaison pour atteindre l'objectif de compter uniquement pendant la durée de survie spécifiée.
Le client peut obtenir atomiquement la valeur actuelle du compteur et effacer le compteur en utilisant la commande GETSET. Pour plus d'informations, veuillez vous référer à la commande GETSET.
En utilisant d'autres opérations d'incrémentation/décrémentation, telles que DECR et INCRBY, les utilisateurs peuvent augmenter ou diminuer la valeur du compteur en effectuant différentes opérations. Par exemple, ces commandes peuvent être utilisées pour les buteurs dans les jeux.
Recommandations associées :
Résumé de l'utilisation de la fonction Redis en php
Enregistrement complet de la construction du cluster Redis
10 contenus recommandés pour les compteurs de performances
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!