Redis : L'outil secret pour un traitement efficace des journaux en temps réel
Avec la popularité des systèmes de journalisation, le traitement des journaux est devenu une partie très importante de la technologie logicielle. Les journaux peuvent fournir aux développeurs des commentaires et des données en temps réel, aidant ainsi à localiser rapidement les problèmes dans le programme. Cependant, lorsque l’échelle de l’entreprise est grande et que la concurrence des systèmes est élevée, le traitement des journaux devient une tâche très difficile. Les solutions traditionnelles de traitement des journaux utilisent des bases de données relationnelles pour le stockage. Bien que cette solution soit réalisable, elle est sujette à des goulots d'étranglement en termes de performances dans les scénarios de concurrence élevée. Afin de résoudre ce problème, de nombreuses entreprises ont commencé à utiliser Redis comme outil de stockage et de traitement des journaux.
Redis est un système de stockage clé-valeur hautes performances. Il se caractérise par la prise en charge de structures de données riches, telles que des chaînes, des hachages, des listes, des ensembles, des ensembles ordonnés, etc., qui peuvent répondre à presque tous les besoins en matière de stockage et de traitement des journaux. . De plus, Redis présente de nombreux avantages tels qu'une lecture et une écriture à grande vitesse, un traitement hautement simultané et la prise en charge de la persistance des données, ce qui en fait un outil très approprié pour le traitement des journaux en temps réel.
Ensuite, nous présenterons en détail comment Redis traite les journaux en temps réel et donnerons des exemples de code pertinents :
1 Redis en tant que file d'attente de journaux
Lorsque des journaux en temps réel massifs doivent être traités rapidement, une stratégie courante consiste à. utilisez la file d'attente des journaux. Redis prend en charge plusieurs structures de données telles que list et set, parmi lesquelles la structure de données de liste correspond aux caractéristiques de la file d'attente. Nous pouvons transférer les enregistrements du journal vers la liste, puis lire les enregistrements de la liste pour les traiter. Cette méthode présente les avantages d’une faible latence, d’une haute disponibilité et d’un déploiement distribué facile.
Ce qui suit est un exemple de code Java montrant comment pousser les enregistrements de journal dans la structure de données de la liste Redis :
Jedis jedis = new Jedis("localhost"); String log = "2021-06-01 13:30:29 INFO - User Login"; jedis.rpush("log_queue", log);
Ici, nous utilisons le client Java Redis Jedis, nous nous connectons d'abord à l'instance Redis, puis utilisons la commande rpush pour pousser le enregistrement du journal vers la log_queue Poussez les enregistrements du journal dans la structure de données de la liste.
Ensuite, nous lisons les enregistrements de la log_queue et les traitons :
while (true) { List<String> logs = jedis.brpop(0, "log_queue"); for (String log : logs) { System.out.println(log); } }
Ici, les enregistrements du journal sont extraits de la fin de la log_queue en exécutant en continu la commande brpop. Lorsque la file d'attente est vide, la commande brpop se bloque jusqu'à ce que de nouveaux enregistrements soient placés dans la file d'attente. De cette façon, nous pouvons atteindre l’objectif d’obtenir des journaux en temps réel.
2. Redis comme collecteur de journaux
Lorsque nous devons collecter plusieurs journaux d'application, nous pouvons utiliser Redis comme collecteur de journaux centralisé. Plus précisément, nous pouvons définir un processeur de journaux dans l'application, qui est chargé de transmettre les enregistrements de journaux du programme actuel dans l'instance Redis. Dans le même temps, un autre processus peut lire et traiter tous les enregistrements de journaux de Redis. Cette approche présente les avantages d’un faible couplage, d’une expansion facile et d’une intégration facile.
Ce qui suit est un exemple de code Java montrant comment utiliser le framework log4j pour transférer les journaux dans Redis :
1 Ajoutez des dépendances dans le fichier pom.xml :
<dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> <version>1.7.25</version> </dependency> <dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>3.6.1</version> </dependency>
2 Ajoutez des configurations dans le fichier de configuration log4j :
log4j.appender.redis=org.apache.log4j.net.SocketAppender log4j.appender.redis.remoteHost=localhost log4j.appender.redis.port=6379 log4j.appender.redis.reconnectionDelay=10000 log4j.appender.redis.locationInfo=true log4j.appender.redis.layout=org.apache.log4j.PatternLayout log4j.appender.redis.layout.ConversionPattern=%m%n
3, définissez le logger log4j dans le code Java et transférez le journal dans Redis :
import org.apache.log4j.Logger; import redis.clients.jedis.Jedis; public class Log4jDemo { private static Logger logger = Logger.getLogger(Log4jDemo.class); private static Jedis jedis = new Jedis("localhost"); public static void main(String[] args) { logger.debug("Hello, World!"); jedis.lpush("log", "Hello, World!"); } }
Ici, nous définissons un objet Logger et utilisons la méthode de débogage pour afficher "Hello, World !". En même temps, nous utilisons des objets Jedis pour placer les journaux dans une liste nommée log.
Ensuite, nous pouvons utiliser un autre processus Java pour lire tous les enregistrements de la liste des journaux et les traiter.
Ce qui précède est une introduction détaillée et des exemples de code de Redis en tant qu'outil secret pour le traitement des journaux en temps réel. En général, Redis offre des performances et une évolutivité très puissantes et peut être utilisé pour des tâches de traitement de journaux dans divers scénarios.
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!