打造 Django 私有化缓存组件 django-api-cache
一:什么是私有化缓存及使用场景?
缓存,在开发中经常使用,如缓存页面等,而对于接口而言,不同用户(或使用不同参数)访问同一接口,因权限不同等需要返回不同内容,在这种情况下,如何利用缓存的优良特性,又能对不同用户数据做出妥善处理,于是笔者想要打造一个 Django 的私有化缓存组件,他应至少具有如下特性:
作为组件使用,兼容 Django 自有缓存系统,配置简单,使用方便。
支持'GET', 'HEAD', 'POST', 'PUT', 'DELETE', 'PATCH'主流请求方式及 form_data,json 等数据格式的接口缓存,支持 render 等页面数据缓存。
支持自定义缓存过期时间。
支持依靠请求头内容区分缓存,如 headers 中携带 jwt token 携带用户信息,以及 headers 中任何可能用来鉴权的内容。
支持依据请求体进行区分,实现同一接口不同参数不同缓存内容。
支持依据请求体中不同参数进行区分,可以指定请求体中的一个或多个参数。
二:这些特性的实现逻辑?
1.如何兼容 django 缓存系统?
基于 django cache_page 进行改造,支持数据库缓存,文件缓存,memcache 等。
2.对多种请求方式及页面和接口缓存的支持?
从请求体中提取请求方式,不同请求体进行不同方式的数据提取。同时缓存只对返回体进行缓存,不区分接口缓存或页面缓存。
3.自定义缓存过期时间?
增加配置项,不同缓存指定不同缓存过期时间。
4.依据请求头进行区分?
指定请求头参数,并将此参数加入缓存 key 的名称,如将用户信息放到 headers 中的 token,即可实现对用户的区分。
5.依据请求体进行区分?
同一接口不同请求参数,做相应的缓存,将请求体进行 hash 处理,加入缓存 key 的名称。
6,指定一个或多个请求参数?
与 5 类似,但粒度至请求体中的一个或多个参数,不同参数 name 拼接处理加入缓存 key 的名称。
三:django-api-cache 使用方式?
项目地址:https://github.com/pygodnet/django-api-cache,已上传 pypi 源
1.安装:pip 进行安装
2.配置:在此使用 redis 做缓存,也可使用 django 的其他缓存
3.使用:代码中无需任何改造,直接使用,详细参数说明可见 github 说明。
实测缓存效果较好,后续将进行不断更新,欢迎进行批评指正
版权声明: 本文为 InfoQ 作者【pygodnet】的原创文章。
原文链接:【http://xie.infoq.cn/article/e3dcd7dd24d7f22985a8db06c】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。
评论 (2 条评论)