django rest框架的缓存实例

drf-cached-instances的Python项目详细描述


通过将实例数据存储在缓存中,加快Django REST Framework(drf)读取速度。

这段代码是从browsercompat中分离出来的。你可能会感兴趣 查看BrowserCompat源代码以获取完整的示例实现。

工作原理

在普通drf视图中,django queryset用于加载 物体。序列化程序用于将对象转换为“本机” 表示,然后渲染器处理此本机表示。如果 序列化程序包括来自相关模型的数据,然后是多个数据库 可能需要查询才能生成本机表示。一些数据库 使用select_related可以获得效率,但至少需要一个查询 是必需的,这对于使用大量读取的api来说是不幸的。

这个项目用一个缓存感知代理类替换了django queryset, 使之能够以零个数据库请求服务读请求(到 检索实例)或一个请求(获取列表视图的主键)。 它适用于具有大量读取操作和 相关实例。

使用缓存时,django对象被序列化为json。只有 drf本机表示所需的属性存储在缓存中。 这包括字段的json表示,例如外键、reverse 关系,日期和时间。这些序列化对象由主对象存储 输入缓存。当在缓存中找到实例时,没有数据库读取 需要呈现drf表示。如果实例不在 缓存,它被序列化和存储,以便将来的读取速度更快。

api实现程序编写方法来处理json序列化,从 数据库,并在更改时标识无效的缓存项。有一个 很少有集成点,包括用于从缓存加载数据的视图的混合。 只有对现有代码进行少量更改,您的读取视图可能会更快得多。

项目状态

此代码用于browsercompat项目,该项目从2015年开始开发 -2016年,但自2016年8月起暂停。因为这是 此代码可能需要一段时间才能实现更多功能。

历史

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。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
安卓 studio安装的java Unity本机广告   java如何将映射转换为对象   java我试图使用rest控制器从h2数据库中检索记录,但它说没有数据集   反思为什么会抛出java。lang.InstanceException?   在opensuse中找不到Java/javac   java为Android上的谷歌地图添加了5900多个标记。如何有效地做   java如何在if语句中使用循环   java如何在JPA(Hibernate)中映射一对多关系和复合主键?   如何在Java中读取和写入外部进程?   Java线程。睡眠时间最短   java使用EclipseGradle插件如何离线托管和使用依赖项(库jar文件)   java为什么虚拟引用在排队时没有被清除?   java无法理解如何创建用于响铃报警的取消按钮   java解析不应通过注入容器错误发生   java Toast或ProgressDialog不显示   java在自定义对象上使用优先级队列的更好方法   java格式的。wmv文件。(或者任何视频文件都很好)   从页面调用另一个侦听器后,不会调用java JSF<f:ajax>侦听器   java注释ConfigApplicationContext不能多次刷新有什么原因吗?