如何使用Redis优化Graphql

时间:2017-12-10 12:56:52

标签: mongodb redis graphql

目前我有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,其中大多数只是简单的值,可能在启动太多请求时浪费时间?

1 个答案:

答案 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数据 - 允许您从结构中挑选数据。这可能是两个世界中最好的。