我在应用程序中遇到一个问题,我正在从 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');
});
如果您处于单一环境中,请在 redis key 周围使用锁。 [https://brunoscheufler.com/blog/2021-05-31-locking-and-synchronization-for-nodejs]
如果您需要处理来自多个客户端的事务,您可以使用 redis 进行锁定。 https://redis.io/docs/manual/patterns/distributed-locks/