我们有一个iOS应用,可通过REST API与Django服务器通信。大多数数据由相当大的Item对象组成,这些对象包含一些渲染成单个平面词典的相关模型,并且该数据很少更改。
我们发现,查询这对于Postgres来说不是问题,但是生成JSON响应需要花费大量时间。另一方面,每个用户的项目集合也有所不同。
我想到了一个渲染系统,我们只需要为Item对象构建一个字典并将其保存为JSON字符串到redis中,这样我们就可以直接从redis提供API(例如HMGET(用户库中的项目ID)),这非常快捷,并使其相对容易地重新生成“渲染实例”,基本上仅是几个post_save信号。
post_save
我想知道这种设计有多好,是否有重大缺陷?也许有更好的方法来完成这项任务?
当然,我们在公司做同样的事情,使用Redis来存储不是JSON,而是存储从RESTful请求的后端数据库生成的大型XML字符串,它节省了大量的网络跃点和开销。
如果这是您第一次使用Redis,请记住一些注意事项…
专用Redis服务器 Redis是单线程的,应部署在具有足够CPU能力的专用服务器上。不要将其部署在您的应用程序或数据库服务器上。
高可用性 通过主/从复制设置Redis以实现高可用性。我知道Redis 集群已经取得了很多进展,因此您可能还需要检查HA。
高速缓存命中/未命中 当在Redis中检查高速缓存“命中”时,如果连接中断或发生任何异常,请不要使请求失败,只需默认使用数据库即可;缓存应该始终是“尽力而为”,因为数据库总是可以用作最后的选择。