如何让Semantic MediaWiki查询始终返回非缓存结果?
Semantic MediaWiki 查询缓存问题解决方案
针对format=max的缓存绕过方法
Semantic MediaWiki的聚合类查询(比如format=max)默认会被缓存,普通用户没法修改全局缓存配置,但可以通过添加无意义的动态参数绕过缓存:
- 利用MediaWiki的
{{CURRENTTIMESTAMP}}变量生成唯一参数,让查询每次加载都被视为新请求,写法如下:
这里的{{#ask:[[Category:Foo]] |?Has ID |format=max |dummy_param={{CURRENTTIMESTAMP}} }}dummy_param是自定义的无效参数,不会影响查询逻辑,但会让缓存系统认为这是全新查询,从而返回实时计算的最大值。只要你的Wiki开启了{{CURRENTTIMESTAMP}}(大部分公共Wiki都支持),这个方法就能生效。
排序取首条写法的缓存情况
你用的这种排序后取第一条的查询:
{{#ask:[[Category:Foo]] |?Has ID |sort=Has ID |order=desc |limit=1 }}
同样会被MediaWiki的页面缓存覆盖。不过它的缓存更新逻辑相对灵敏:当Category:Foo下的页面有Has ID属性修改时,缓存通常会自动触发刷新,但如果是高频修改场景,还是可能出现缓存延迟。
如果要让这个查询也强制返回实时结果,同样可以添加动态参数绕过缓存:
{{#ask:[[Category:Foo]] |?Has ID |sort=Has ID |order=desc |limit=1 |dummy_param={{CURRENTTIMESTAMP}} }}
注意事项
- 这种绕过缓存的方式会增加服务器计算负载,只在确实需要实时结果的场景使用;
- 如果你的Wiki禁用了
{{CURRENTTIMESTAMP}},可以尝试用其他动态变量(比如{{CURRENTDAY}}{{CURRENTHOUR}}),效果类似。
内容的提问来源于stack exchange,提问作者MothOnMars
相关产品推荐
相关产品推荐

