You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Node.js API中数据库更新后Redis缓存未同步问题求助

Node.js REST API集成Redis后缓存与数据库不同步的问题

问题描述

我在Node.js REST API中集成Redis实现数据缓存,首次请求会从数据库获取数据并存入缓存,后续请求从缓存读取以提升性能。但数据库新增或删除数据后,API仍返回旧的缓存数据,即使缩短缓存过期时间也无效。初始启动Redis时数据库有4条profiles数据,缓存成功,但新增数据后API始终返回旧的4条数据。

测试路由:

http://localhost:5000/api/profiles

控制器方法代码:

exports.getProfiles = asyncHandler(async (req, res, next) => {
    const redis = require('redis');
    const url = 'redis://127.0.0.1:6379';
    const client = redis.createClient(url);
    await client.connect();

    const cached = await client.get('profiles');
    
    if(cached) {
        console.log('Profiles cached');
        res.status(200).json(JSON.parse(cached));
        return;
    }

    const profiles = await Profile.findAll();
    console.log('Profiles not cached');
    res.status(200).json(profiles);

    
    client.SETEX('profiles',  3600, JSON.stringify(profiles));
});

问题分析与解决方法

1. Redis客户端重复创建(优化点)

你当前每次请求getProfiles都会创建新的Redis客户端并建立连接,这会造成连接资源浪费,还可能引发连接泄漏问题。应该全局复用一个Redis客户端实例:

  • 创建单独的Redis配置文件(如redis.js):
const redis = require('redis');
const url = 'redis://127.0.0.1:6379';
const client = redis.createClient(url);

// 连接Redis并捕获错误
client.connect().catch(err => console.error('Redis连接失败:', err));

module.exports = client;
  • 在控制器中导入复用该客户端:
const client = require('../redis'); // 根据实际路径调整

2. 数据库变更时未主动失效缓存(核心问题)

当前逻辑只有在缓存不存在或过期时才会从数据库拉取新数据,但如果缓存未过期,即使数据库数据更新,API仍会返回旧缓存。解决方式是在数据库增删改操作的接口中主动删除对应缓存:

比如在新增Profile的控制器方法中添加缓存删除逻辑:

const client = require('../redis');
exports.createProfile = asyncHandler(async (req, res, next) => {
    const newProfile = await Profile.create(req.body);
    res.status(201).json(newProfile);

    // 删除profiles缓存,确保下次请求拉取最新数据
    await client.del('profiles');
});

同理,在删除或更新Profile的接口中,也需要执行await client.del('profiles')操作。

3. 缓存设置未等待异步完成(代码优化)

当前代码中client.SETEX没有加await,虽然不会直接导致缓存不同步,但可能因为异步执行顺序问题导致缓存设置失败。建议加上await确保缓存设置完成:

await client.SETEX('profiles', 3600, JSON.stringify(profiles));

内容的提问来源于stack exchange,提问作者tukitooo1998

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 02:05:29