django rest框架的缓存实例
drf-cached-instances的Python项目详细描述
通过将实例数据存储在缓存中,加快Django REST Framework(drf)读取速度。
这段代码是从browsercompat中分离出来的。你可能会感兴趣 查看BrowserCompat源代码以获取完整的示例实现。
- 代码:https://github.com/jwhitlock/drf-cached-instances
- 自由软件:Mozilla Public License Version 2.0
- 文档:https://drf-cached-instances.readthedocs.io
工作原理
在普通drf视图中,django queryset用于加载 物体。序列化程序用于将对象转换为“本机” 表示,然后渲染器处理此本机表示。如果 序列化程序包括来自相关模型的数据,然后是多个数据库 可能需要查询才能生成本机表示。一些数据库 使用select_related可以获得效率,但至少需要一个查询 是必需的,这对于使用大量读取的api来说是不幸的。
这个项目用一个缓存感知代理类替换了django queryset, 使之能够以零个数据库请求服务读请求(到 检索实例)或一个请求(获取列表视图的主键)。 它适用于具有大量读取操作和 相关实例。
使用缓存时,django对象被序列化为json。只有 drf本机表示所需的属性存储在缓存中。 这包括字段的json表示,例如外键、reverse 关系,日期和时间。这些序列化对象由主对象存储 输入缓存。当在缓存中找到实例时,没有数据库读取 需要呈现drf表示。如果实例不在 缓存,它被序列化和存储,以便将来的读取速度更快。
api实现程序编写方法来处理json序列化,从 数据库,并在更改时标识无效的缓存项。有一个 很少有集成点,包括用于从缓存加载数据的视图的混合。 只有对现有代码进行少量更改,您的读取视图可能会更快得多。
0.3.4(2016-08-14)
- 放弃对django 1.7、python 2.6的支持
- 将测试扩展到django 1.10、django rest framework 3.4、python 3.5
0.3.3(2015-11-05)
- 为datetime.timedelta添加序列化程序,以支持django 1.8 持续时间字段(creynold)
- 转换日期时间、日期和时间增量的字符串表示形式
- 将测试扩展到django 1.9beta1和djangorestframework3.3
0.3.2(2015-09-23)
- 删除django 1.8中的折旧警告
- 将测试扩展到django master和django rest framework 3.2
- 修复在mock 1.3.0下中断的无效mock.patch测试
- 文档更新和修复
0.3.1(2015-06-16)
- 将GETXObjutoToRo.404移动到MIXIN方法,以便更容易地扩展。
0.3.0(2015-04-09)
- 用django 1.8进行测试
- 使用django rest framework 2.4、3.0和3.1进行测试
- cachedModel现在支持.pk属性作为别名,通常是.id 字段。drf 3使用.pk来确定是否将模型保存到数据库中,并且 返回未保存字段的空关系数据。
- delete_all_versions()将删除模型和 PK。当在正常请求之外进行更改时,这非常有用,例如 在数据迁移期间。
0.2.0(2014-12-11)
- 将update_only选项添加到cache.update_instance,以支持最终 冷缓存的一致性。
0.1.0(2014-11-06)
- 第一个版本是pypi。