Redis est devenu le cache standard pour les sociétés Internet en raison de ses hautes performances et de ses fonctionnalités légères. Parfois, nous souhaitons ajouter des commandes personnalisées, principalement dans les scénarios où Redis est fortement utilisé, comme. dans les scénarios d'achat de panique, il est nécessaire de garantir la transactionnalité de plusieurs commandes Redis. S'il n'y a pas de bonne garantie d'atomicité, des problèmes d'incohérence des données peuvent facilement survenir.
Bien que le plan de transaction officiel soit fourni, s'il est nécessaire de porter un jugement basé sur la valeur de retour d'une certaine commande avant de passer à l'étape suivante, le plan de transaction ne pourra pas y faire face.
Aujourd'hui, nous allons utiliser un cas pratique pour décrire comment ajouter une commande Redis. Cette commande est principalement utilisée dans les scénarios anti-brushing :
Il est souvent nécessaire de bannir une certaine IP ou une. certain utilisateur pendant un certain temps. Si cette commande n'est pas utilisée, la solution est la suivante :
Commencez par augmenter, puis déterminez si c'est 1. Si c'est 1, définissez le délai d'expiration. On peut voir que si le premier client qui initie la requête incr raccroche pendant une concurrence élevée, la clé n'expirera pas.
La commande à écrire aujourd'hui est utilisée pour assurer cette transaction. Le côté serveur s'assure que si la valeur de la clé est 1, le délai d'expiration est défini. L'utilisation de la commande
est la suivante :
incexpire key expireTime maxNum
key : la clé à traiter
expireTime : délai d'expiration, en secondes Si vous écrivez 10, cela signifie. que la clé expirera dans 10 secondes. ;
maxNum : Indique le montant à augmenter jusqu'à ce qu'il n'augmente pas. S'il est défini sur 10, la valeur maximale renvoyée est 11. Renvoyer 11 signifie qu'il a été. dépassé ;
2. Écrivez la commande
1. Téléchargez le code redis
La version Redis utilisée dans cet article est
Télécharger ; le code et passez à la branche 3.2.11
git clone https://github.com/antirez/redis
2. Écrivez du code de commande supplémentaire
1) Ajoutez une nouvelle commande à la structure redisCommandTable dans src/server.c
struct redisCommand redisCommandTable[] = {
redisCommandTable est un tableau, chaque élément représente une commande redis et le premier représente une commande. Le deuxième est la fonction de traitement réelle et le troisième est le nombre de paramètres. Les autres ne seront pas discutés en détail.
2) Ajoutez une déclaration de fonction dans src/server.h :
void incrExpireCommand(client *c);
3) Ajoutez ensuite un fichier comme ljh.c (nommez-le vous-même) et ajoutez le code suivant :
#include "server.h"
4) Ajouter un nouveau fichier ljh.o dans src/Makefile
REDIS_SERVER_OBJ=adlist.o quicklist.o ae.o anet.o dict.o server.o sds.o zmalloc.o lzf_c.o lzf_d.o pqsort.o zipmap.o sha1.o ziplist.o release.o networking
L'effet d'exécution est le suivant
Comme vous pouvez le voir, après que key1 soit augmenté à 11, il n'augmente plus et après 10 secondes, il redevient 1.
Enfin, nous devons encore nous demander s'il est nécessaire d'ajouter des commandes Redis dans notre scénario. Si nécessaire, nous devons saisir les responsabilités entre chaque couche et ne pas laisser Redis finir par traiter les affaires ; a déclaré que la couche middleware gère généralement des fonctions relativement courantes. Les couches inférieures devraient être plus stables et moins il y a de changements, la situation est normale.
Pour plus de connaissances connexes, veuillez prêter attention à la colonne tutoriel d'introduction à Redis
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!