我正在我的 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
,而不是最新数据。
我尝试过缩短过期时间,但没有成功。
我错过了什么?
1- 你能做的第一件事就是减少 ttl,现在,你的 ttl 是 3600 秒,也就是 1 小时,所以如果你在 1 小时之前检查结果,你不会得到新的结果
2-您可以做的第二件事是当新数据插入数据库时将数据保存在缓存中。如果您有用于更新数据库的端点,请始终清除缓存或在更新时将新数据保存在缓存中,以始终在缓存中拥有正确的数据。