【发布时间】:2020-11-15 01:08:28
【问题描述】:
我正在考虑向我的应用程序添加内存缓存(如 redis),但在理解它们如何组合在一起时遇到了一些问题。
const postLoader = new DataLoader(async keys => {
// ... sql code to get multiple posts by ids
})
const postRepository = {
async get(id) {
let post = await cachingImplementation.get("post:" + id)
if (!post) {
post = await postLoader.load(id)
}
return post
}
}
我了解对数据库进行批量查询的需要,但同样的原则是否适用于对 redis 服务器的查询?
在这种情况下,如果我在同一个时钟周期内运行 postRepository.get 方法 10 次,我将不得不向 redis 服务器发出 10 个不同的请求。
这是个问题吗?我是否应该将实际的获取源(缓存或数据库)移动到数据加载器解析器中,这样它就不会直接执行 sql 代码,而是先查看缓存,然后再查看数据库。
例如
cache = {
1: ...,
2: ...
}
如果我要求 id 为 1、2、3 的帖子,缓存中只有两个。所以我必须过滤掉现有的并在数据库中查询剩余的,或者只检查请求的 id 是否与返回的行长度匹配,如果不匹配,则查询数据库中的所有内容。
这两种方法的缺点是什么?有首选的解决方案吗?
【问题讨论】:
标签: node.js graphql dataloader