为什么我的数据库更新时我的缓存没有更新?

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

我正在我的 Nodejs REST API 中实现 Redis,但由于我是 Redis 新手,我遇到了一些问题。 我已成功创建客户端,并且我的日期存储在缓存中,但缓存从未更新。

通过阅读文档,我了解到的是,我的第一个请求将发送到数据库,并将数据存储在缓存中,这样当我发出更多请求时,我得到的响应就来自缓存,从而产生更好的性能。但我想要的是,当我的数据库用新数据更新,或者某些行被删除时,我的 API 应该使用更新的数据库再次向数据库发出请求,从而更新缓存。

所以这是我正在测试的路线:

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));
});

当我第一次启动redis服务器时,我有四个

profiles
,它们已成功存储在缓存中。

现在我向数据库添加了更多

profiles
,但我仍然从缓存中获取原始的 4
profiles
,而不是最新数据。

我尝试过缩短过期时间,但没有成功。

我错过了什么?

node.js express caching redis
1个回答
0
投票

1- 你能做的第一件事就是减少 ttl,现在,你的 ttl 是 3600 秒,也就是 1 小时,所以如果你在 1 小时之前检查结果,你不会得到新的结果

2-您可以做的第二件事是当新数据插入数据库时将数据保存在缓存中。如果您有用于更新数据库的端点,请始终清除缓存或在更新时将新数据保存在缓存中,以始终在缓存中拥有正确的数据。

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