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

时间:2013-04-24 18:34:10

标签: django rest redis

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

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

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

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

1 个答案:

答案 0 :(得分:18)

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

如果您第一次使用Redis,请记住以下几点......

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

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

缓存命中/错过
当检查Redis的缓存"点击"时,如果连接已经死或发生任何异常,请不要将请求失败,只是默认为数据库;缓存应该始终是最好的努力'因为数据库总是可以作为最后的手段使用。