11

我们有一个通过 REST API 与 django 服务器对话的 iOS 应用程序。大多数数据由相当大的 Item 对象组成,其中涉及一些相关模型,这些模型呈现为单个平面字典,并且这些数据很少更改。

我们发现,查询这对 Postgres 来说不是问题,但生成 JSON 响应需要相当长的时间。另一方面,项目集合因用户而异。

我想到了一个渲染系统,我们只需为 Item 对象构建一个字典并将其作为 JSON 字符串保存到 redis 中,这样我们就可以直接从 redis 提供 API(例如 HMGET(用户库中项目的 id),速度很快,并且使重新生成“渲染实例”变得相对容易,基本上只是几个post_save信号。

我想知道这个设计有多好,它有什么重大缺陷吗?也许有更好的方法来完成这项任务?

4

1 回答 1

19

当然,我们公司也这样做,使用 Redis 存储的不是 JSON,而是大型 XML 字符串,这些字符串是从后端数据库为 RESTful 请求生成的,它节省了大量的网络跃点和开销。

如果这是您第一次使用 Redis,请记住几件事...

专用 Redis 服务器
Redis 是单线程的,应部署在具有足够 CPU 能力的专用服务器上。不要错误地将其部署在您的应用程序或数据库服务器上。

高可用性
使用主/从复制设置 Redis 以实现高可用性。我知道 Redis cluster取得了很大进展,因此您可能也想检查一下 HA。

Cache Hit/Miss
在检查 Redis 是否有缓存“命中”时,如果连接已死或发生任何异常,请不要使请求失败,只需默认到数据库即可;缓存应该始终是“尽力而为”,因为数据库始终可以作为最后的手段。

于 2013-04-24T19:18:18.607 回答