Maison  >  Article  >  base de données  >  Créer une application de vote en ligne à l'aide de Node.js et Redis : comment gérer une simultanéité élevée

Créer une application de vote en ligne à l'aide de Node.js et Redis : comment gérer une simultanéité élevée

WBOY
WBOYoriginal
2023-07-29 21:17:101575parcourir

Créer des applications de vote en ligne à l'aide de Node.js et Redis : comment gérer une concurrence élevée

Avec le développement d'Internet, de plus en plus d'applications doivent gérer des situations de forte concurrence. Les applications de vote en ligne constituent un scénario typique à forte concurrence. Les utilisateurs soumettent un grand nombre de demandes de vote sur une courte période de temps. L'application doit être capable de traiter ces demandes rapidement et de maintenir la cohérence des données. Cet article explique comment utiliser Node.js et Redis pour créer une application de vote en ligne hautement concurrente.

  1. Introduction à Redis

Redis est une base de données clé-valeur basée sur la mémoire qui est populaire pour sa lecture et son écriture rapides et sa prise en charge riche de la structure de données. Dans cet article, nous utiliserons Redis pour stocker les données de vote et exploiter ses opérations atomiques pour garantir la cohérence des données.

  1. Conception architecturale

Afin de faire face aux demandes de vote simultanées élevées, nous avons adopté la conception architecturale suivante :

  • Page frontale : utilisez HTML et CSS pour créer l'interface utilisateur et envoyez les demandes de vote au nœud. Serveur .js via Ajax.
  • Serveur Node.js : gère chaque demande de vote et utilise Redis pour lire et écrire les données de vote.
  • Base de données Redis : stocke les données de vote et fournit des opérations atomiques pour le contrôle de la concurrence.
  1. Implémentation du code

Ce qui suit est un exemple de code côté serveur Node.js :

const express = require('express');
const redis = require('redis');

// 创建Express应用
const app = express();

// 创建Redis客户端
const redisClient = redis.createClient();

// 处理投票请求
app.post('/vote', (req, res) => {
  const { option } = req.body;

  // 增加投票计数
  redisClient.incr(option, (err, result) => {
    if (err) {
      // 投票失败的处理
      res.status(500).json({ error: '投票失败' });
    } else {
      // 投票成功的处理
      res.status(200).json({ success: '投票成功' });
    }
  });
});

// 启动服务监听
app.listen(3000, () => {
  console.log('服务器已启动');
});

Le code ci-dessus présente d'abord les modules express et redis, et crée une application Express et un client Redis. La fonction app.post('/vote', ...) est utilisée pour traiter les demandes de vote et est implémentée en appelant redisClient.incr(option, ...) Le nombre de votes pour l'option correspondante est augmenté. Un code d'état 200 sera renvoyé si le vote est réussi, et un code d'état 500 sera renvoyé si le vote échoue. app.post('/vote', ...)函数用于处理投票请求,通过调用redisClient.incr(option, ...)实现对相应选项的投票计数增加。投票成功后返回200状态码,投票失败则返回500状态码。

  1. 并发控制

在高并发的情况下,多个用户同时对同一个选项进行投票会导致数据不一致。为了解决该问题,我们可以使用Redis提供的原子操作来进行并发控制。

// 获取锁
redisClient.get('vote_lock', (err, result) => {
  if (result) {
    // 已经有其他用户正在投票,处理投票失败的逻辑
    res.status(500).json({ error: '投票失败' });
  } else {
    // 获取锁成功,可以进行投票
    // 设置超时时间,防止异常情况下锁没有被释放
    redisClient.setex('vote_lock', 10, 'locked');

    // 增加投票计数
    redisClient.incr(option, (err, result) => {
      if (err) {
        // 投票失败的处理
        res.status(500).json({ error: '投票失败' });
      } else {
        // 投票成功的处理
        res.status(200).json({ success: '投票成功' });
      }

      // 释放锁
      redisClient.del('vote_lock');
    });
  }
});

上述代码通过使用Redis的getsetex

    Contrôle de la concurrence
    1. Dans le cas d'une concurrence élevée, plusieurs utilisateurs votant sur la même option en même temps entraîneront une incohérence des données. Afin de résoudre ce problème, nous pouvons utiliser les opérations atomiques fournies par Redis pour le contrôle de concurrence.
    rrreee

    Le code ci-dessus implémente un mécanisme de verrouillage simple en utilisant les opérations get et setex de Redis pour garantir qu'un seul utilisateur peut voter en même temps et le libérer après le vote. se termine.

    🎜🎜Résumé🎜🎜🎜Cet article explique comment créer une application de vote en ligne hautement concurrente à l'aide de Node.js et Redis. En utilisant les opérations atomiques de Redis et le mécanisme de verrouillage simple, nous sommes en mesure de gérer un grand nombre de demandes de vote simultanées et de maintenir la cohérence des données. J'espère que cet article pourra vous aider à comprendre le traitement à haute concurrence. 🎜

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn