使用Redis作为REST API的中间缓存

Dmi*_*nko 11 django rest redis

我们有一个iOS应用程序通过REST API与django服务器通信.大多数数据由相当大的Item对象组成,这些对象涉及一些相关模型,这些模型可以渲染为单个平面字典,并且这些数据很少发生变化.

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

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

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

raf*_*ian 18

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

如果这是您第一次使用Redis时要记住的一些事项......

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

高可用性
使用主/从复制设置Redis以实现高可用性.我知道Redis 群集有很多进展,所以你可能也想检查一下HA.

高速缓存命中/未命中
当检查Redis的高速缓存"命中"时,如果连接已死或发生任何异常,请不要使请求失败,只是默认为数据库; 缓存应始终是"尽力而为",因为数据库始终可以作为最后的手段.