Lors de la réalisation de certaines opérations chronométrées, nous avons besoin d’un retour sur les résultats. Par exemple, les commandes sont automatiquement supprimées après expiration, les commandes sont automatiquement louées après quelques jours, les commandes impayées sont fermées après 15 minutes, etc., ce qui peut être réalisé à l’aide de certains cadres de tâches temporisées ou de méthodes de sondage. Cet article utilise le mécanisme de notification d’expiration d’événements de cache de fonctionnalités avancées de Redis combiné au code .NET/C# pour satisfaire aux exigences métier.
Introduction
Scénarios d’utilisation : 1. Dans le secteur des paiements, les ordres impayés sont automatiquement fermés 2. Rappels d’expiration du cache
En général, nous pouvons utiliser le service de chronométrage pour traiter la fermeture automatique des commandes impayées, comme appeler l’interface chaque minute pour traiter les commandes impayées et expirées, mais dans ce cas, cela consommera des performances informatiques, même s’il n’y a pas de commande, elle sera traitée toutes les minutes, et le délai maximal de traitement de la commande sera de 59 secondes, et le service de chronométrage doit toujours être disponible
Alors, que voulons-nous faire ? Mais lorsqu’il y a des commandes impayées ou expirées avec un traitement à faible latence ? Nous pouvons utiliser le mécanisme d’expiration du cache de Redis pour pousser l’abonnement ?
Abonnement Redis
Modifier le notify-keyspace-events Ex dans le fichier de configuration redis.conf
Pour économiser des ressources de la coupe, les notifications d’événements ne sont pas activées par défaut, et par défaut est notify-keyspace-events
# Notification d’espace K, <db>préfixée de __keyspace@__ # Notification d’événement clé E, <db>précédée de __keysevent@__ # g del, expipre, renommer et d’autres types de commandes génériques, ... # $string commande # Commande l List #s Commande Set # h Commande de hachage # Commande d’ensemble ordonné z # x Événement d’expiration (généré à chaque expiration d’une clé) # Événement d’expulsion E (généré lorsque la clé est effacée alors que la mémoire est pleine) # Un alias g$lshzxe, donc « AKE » signifie tous les événements
Notify-keyspace-events « KX » indique que vous souhaitez surveiller les événements d’invalidation pour une clé. Définir le paramètre sur la chaîne AKE signifie envoyer tous types de notifications.
J’ai installé Redis en tant que service sur ma machine, modifié le fichier de configuration redis.windows.conf, et j’ai dû redémarrer la configuration du service Redis pour que cela prenne effet.
Exemple de code .NET/C#
Le package est le suivant :
invoquer
Essayons d’écrire un cache avec redis-cli.
En fait, vous pouvez aussi vous abonner aux notifications d’expiration du cache en exécutant la commande suivante via redis-cli :
Lorsque N clients s’abonnent aux notifications d’événements d’expiration du cache, Redis informera N utilisateurs du même message d’expiration, et non seulement un des clients, comme montré dans la figure ci-dessous :
Téléchargement du code source C# :
https://down.itsvse.com/item/17856.html
résumé
Redis pub/sub est un mécanisme de messages peu fiable, il ne stocke pas d’informations, il ne fait que transférer en ligne, et il n’y a clairement pas de mécanisme de confirmation d’ack, seul le segment d’abonnement sera transféré, donc Keyspace Notifications est aussi un système de notification peu fiable, si notre entreprise a besoin d’une bonne fiabilité, alors ce n’est pas le meilleur choix. En général, nous recommandons le DLX (Dead-Letter-Exchange) de RabbitMQ pour l’implémenter, c’est-à-dire la fonction de file d’attente retardée. C’est juste que la solution de Redis est plus facile à mettre en œuvre et moins coûteuse à exploiter. Il reste très pratique pour les entreprises qui ne nécessitent pas une grande fiabilité. |