在 Express.js 中同步 Redis 读写操作,避免数据覆盖

问题描述 投票:0回答:1

我在应用程序中遇到一个问题,我正在从 Redis 读取数据并根据读取的值对其执行操作。但是,当我在同一路线上收到多个时间差异非常小的请求时,我最终会从 Redis 获得这两个操作的相同值。在第二个请求开始之前,第一个请求似乎还没有完全完成其读写操作。

我想确保对于特定 Redis 键的所有请求始终同步读取和写入数据,以避免数据不一致。如何有效地将 Express.js 中的读写操作与 Redis 同步,确保每个请求操作的都是最新的数据?

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

const app = express();
const client = redis.createClient();

app.get('/data', (req, res) => {
 const key = req.query.key;

 // Read data from Redis
 client.get(key, (err, data) => {
     if (err) {
         res.status(500).send('Error reading data from Redis');
         return;
     }

     // Manipulate data
     // ...

     // Write manipulated data back to Redis
     client.set(key, manipulatedData, (err) => {
         if (err) {
             res.status(500).send('Error writing data to Redis');
             return;
         }

         res.send('Data successfully manipulated and updated in Redis');
     });
 });
});

app.listen(3000, () => {
 console.log('Server is running on port 3000');
});
node.js express redis
1个回答
0
投票

如果您处于单一环境中,请在 redis key 周围使用锁。 [https://brunoscheufler.com/blog/2021-05-31-locking-and-synchronization-for-nodejs]

如果您需要处理来自多个客户端的事务,您可以使用 redis 进行锁定。 https://redis.io/docs/manual/patterns/distributed-locks/

https://github.com/mike-marcacci/node-redlock

© www.soinside.com 2019 - 2024. All rights reserved.