目前我有mongodb的graphql,现在我想添加redis层来优化服务器响应时间。
假设我有这样的架构:
type Query{
book(id: ID):Book
}
type Book{
# simple fields direct come from mongodb collection Book
A
B
C
# fields with values generated from simple fields
X
Y
Z
# fields with aggregated data from other db collections e.g avg/min/max
L
M
N
}
以下是问题:我应该在Redis中存储哪种数据?
1)来自db的字符串化原始文档,由ID
键入2)将每个计算字段放入redis的哈希值,每个字段使用redis的HGET
以下是我对上述选项的担忧:
1)字段ABC / XYZ应该没问题,但LMN将导致额外的数据库访问
2)当查询Book的所有字段时,每个字段都会有一个HGET,其中大多数只是简单的值,可能在启动太多请求时浪费时间?
答案 0 :(得分:1)
通常,缓存的想法是以您想要的方式放置数据。但是,Redis在内存中并且内存并不便宜 - 因此我不会在内存上浪费内存。话虽如此,只需将值抛出到Redis哈希值(每个字段一个值)。
关于浪费时间的请求(我认为你的意思是Redis),这不是一个大问题。 Redis的基础协议非常有效,您可以这样做(给出书籍ID为'book1234'):
HGETALL book1234
获取所有内容HGET book1234 A B C X Y Z L M N
(或您选择的字段)。 HGET是可变参数(因为Redis 4),所以你可以只提供你想要的字段。最后,如果您能够安装Redis模块,您可能需要查看ReJSON,它允许本地处理JSON数据 - 允许您从结构中挑选数据。这可能是两个世界中最好的。