p.a.caching 插件,提供更好的清理策略
项目描述
collective.purgebyid
collective.purgbyid 是一个针对基于Plone的网站缓存无效化的新方法。它使用添加一个额外头部的想法,称为X-Ids-Involved,其中包含参与资源构建的对象的uuid。例如,一个图像只包含其uuid
% wget -S http://localhost:8080/Plone/image01 ... X-Ids-Involved: #c8d7c0bc2b794325b916d990de91d7ee#
其他页面可能更复杂。然后,一个新的清理重写规则会将自定义URL添加到要清理的URL集合中:“按id清理”自定义URL的形式为/@@purgebyid/<UUID>,其中UUID是要清理的对象的uuid。
最后,Varnish 配置为,当 URL /@@purgebyid/<UUID> 被清除时,它将禁止所有匹配正确类型(即包含要清除的资源 uuid)的 X-Ids-Involved 标头的对象。这意味着当资源被清除时,清除它自己的 /@@purgebyid/<UUID> URL 就足够了,因为 Varnish 将负责在访问它的 URL 所使用的任何时候捕获资源的所有出现。
Varnish 没有使用 xkey varnish 模块
在没有 xkey 模块的情况下,清除资源的方法是禁止所有具有包含要清除资源 id 的 X-Ids-Involved �头的对象。
为了更好地理解两种方法(禁止与清除)之间的区别,请阅读:https://varnish-cache.org/docs/trunk/users-guide/purging.html
配置示例
sub vcl_recv { if (req.method == "PURGE") { if (!client.ip ~ purge) { return (synth(405, "This IP is not allowed to send PURGE requests.")); } if (req.url ~ "^/@@purgebyid/") { ban("obj.http.x-ids-involved ~ #" + regsub(req.url, "^/@@purgebyid/", "") + "#"); return(synth(200, "Ban added")); } return(purge); } } sub vcl_deliver { unset resp.http.x-ids-involved; }
Varnish 使用 xkey varnish 模块
默认情况下,Varnish 使用 URL 作为清除的哈希键,但使用 xkey 模块(https://github.com/varnish/varnish-modules/blob/master/src/vmod_xkey.vcc)时,会有一个二级哈希来执行此操作。可以特别清除标记的缓存对象,以实现更精确的缓存控制。
要使 xkey 生效,必须提供一个特殊的 HTTP 标头“Xkey”,其中包含所有标签(用空格分隔)。在 vcl_backend_response 中添加少量代码将 X-Ids-Involved 标头转换为 XKey。
配置示例
import xkey; sub vcl_recv { if (req.method == "PURGE") { if (!client.ip ~ purge) { return (synth(405, "This IP is not allowed to send PURGE requests.")); } if (req.url ~ "^/@@purgebyid/") { set req.http.n-gone = xkey.purge(regsub(req.url, "^/@@purgebyid/", "")); # or: set req.http.n-gone = xkey.softpurge(regsub(req.url, "^/@@purgebyid/", "")); return (synth(200, "Invalidated "+req.http.n-gone+" objects")); } } return(purge); } sub vcl_backend_response { if (beresp.http.x-ids-involved) { set beresp.http.xkey = regsuball(beresp.http.x-ids-involved, "#", " "); } } sub vcl_deliver { unset resp.http.x-ids-involved; unset resp.http.xkey; }
软清除与常规清除的区别在于,它重置对象的生命周期(TTL),但保留它以供优雅模式和条件请求使用,直到其配置的优雅时间和保持时间的剩余部分。
它如何工作?如何扩展它?
在发布过程中,通过订阅 IPubAfterTraversal 收集所有涉及的 ID(UUID 和自定义 ID)。
对于 IInvolvedID 的适配器非常重要,它们负责收集给定上下文中的 ID。基本实现寻找 UUID,但可能针对您的自定义内容类型进行特殊化。
除了适配器方法外,还有内联方法。您可以从 collective.purgebyid.api 调用以下方法:
mark_involved_objects(request, objs, stoponfirst=False)
mark_involved(request, single_id)
第一个方法内部使用 IInvolvedIDs 的适配器来处理给定对象,而第二个方法允许设置任意 ID。这些方法可以结合使用在您的视图中,在渲染某个特定对象或部分时。
此外,还有一个名为“purgebyid”的实用浏览器视图,可以在模板中使用如下:
<body tal:define="purgeutils nocall:context/@@purgebyid">
...
<tal:image tal:define="image python:context.get_image()" tal:condition="python: image">
<tal:mark-involved tal:define="dummy python:purgeutils.mark(image)" />
<!-- put image rendering here -->
...
</tal:image>
...
</body>
或者,您还可以再次设置任意 ID
<tal:mark-involved tal:define="dummy python:purgeutils.mark('my_custom_id')" />
收集所有 ID 后,ITransform 适配器将预期的 X-Ids-Involved 标头放入 HTTP 响应标头中。
当 Plone 向配置的缓存代理发送清除请求时,它还会发送一个专门的处理带标签的对象的请求。
参考文献
贡献者
Mauro Amico,作者
变更日志
1.2.2 (2024-02-29)
plone 6.0 / python 3.11, 3.12 支持 [mamico]
1.2.1 (2022-12-08)
plone 6.0 / python 3.10 支持 [mamico]
避免使用 plonesite 的 UUID 标记请求 [mamico]
1.2.0 (2022-08-04)
collective.xkey 回滚。添加实用浏览器视图。 [pgrunewald, mamico]
修复 p.a.multilingual IUUID 适配器不一致性 [mamico]
1.1.2 (2021-11-22)
删除未使用的 importDependencies(用于 pip 安装兼容性)。 [cekk]
1.1.1 (2019-06-05)
Python 3 支持 [mamico]
1.1.0 (2018-05-14)
将标头修改器从 PubSuccess 事件移动到 plone.transformchain。修复使用 p.a.caching 的 ramcache 操作中缺少的标头 #2 [mamico]
添加 IIDinvolved 适配器以轻松实现“涉及 ID”提取器 [mamico]
管理资源目录,因为之前所有资源都被导航根标记为“涉及” [mamico]
修复 IUUID-适配器没有默认值的问题 [datakurre]
1.0.0 (2016-01-14)
在请求上使用 zope.annotation [mamico]
删除未使用的通用设置配置文件 [mamico]
1.0.0a1 (2013-09-11)
使用templer创建的软件包 [Mauro Amico]
项目详情
下载文件
下载适合您平台的文件。如果您不确定选择哪个,请了解有关安装包的更多信息。
源分布
构建分布
collective.purgebyid-1.2.2.tar.gz的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 4e3eaf84c39563f0fa479f6e5cdffce691ed955e176c553d233b1e9206bf8704 |
|
MD5 | 769baa8b3bec324a3118224ed6b91eda |
|
BLAKE2b-256 | a528456cd7877065e7e06f708a4f04bfe23509f090a4008d0388742b66fc4430 |
collective.purgebyid-1.2.2-py2.py3-none-any.whl的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | dccb91645567198e652845da65504551b48d200fedae87cd3f05ab5e40e71cb7 |
|
MD5 | 7a1f3fe106fdf35372ced90645171bbe |
|
BLAKE2b-256 | 57a0ad9628b3fe3d28690e1fb0b079b21ee7dfbc0eb9cf37a88f9f417494cbee |