Node.js と Redis を使用したオンライン投票アプリケーションの構築: 高い同時実行性を処理する方法
インターネットの発展に伴い、より多くのアプリケーションが高い同時実行性の状況を処理する必要があります。オンライン投票アプリケーションは典型的な同時実行性の高いシナリオです。ユーザーは短期間に大量の投票リクエストを送信します。アプリケーションはこれらのリクエストを迅速に処理し、データの一貫性を維持できる必要があります。この記事では、Node.js と Redis を使用して同時実行性の高いオンライン投票アプリケーションを構築する方法を紹介します。
Redis は、高速な読み書きと豊富なデータ構造のサポートで人気のあるメモリベースのキー/値データベースです。この記事では、Redis を使用して投票データを保存し、そのアトミック操作を利用してデータの一貫性を確保します。
大量の同時投票リクエストに対処するために、次のアーキテクチャ設計を採用しました:
次は、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('服务器已启动'); });
上記のコードでは、最初にExpress および Redis モジュールを追加し、Express アプリケーションと Redis クライアントを作成しました。 app.post('/vote', ...)
関数は投票リクエストの処理に使用され、対応するオプションは redisClient.incr(option, ...)# を呼び出すことで実装されます。 ## 投票数が増加します。投票が成功すると 200 ステータス コードが返され、投票が失敗すると 500 ステータス コードが返されます。
// 获取锁 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'); }); } });
get および
setex 操作を使用して単純なロック メカニズムを実装し、同時に 1 人のユーザーのみが投票できるようにしています。投票が終了したら、ロックを解除します。
以上がNode.js と Redis を使用したオンライン投票アプリケーションの構築: 高い同時実行性を処理する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。