【问题标题】:how to disable / turn-off / refresh couchdb caching如何禁用/关闭/刷新couchdb缓存
【发布时间】:2013-02-19 00:30:54
【问题描述】:

我有一个列表,其中包含对文档的一些基本身份验证。我遇到的问题是列表正在缓存,因此除非我更新修订 ID,否则用户将看不到他们有权访问。如何显示非缓存列表?

if (req.userCtx.name === doc.permissions.owner) {
    return 'you have permission';   
}
else {
    return 'you do not';
}

我认为它是通过在标头中传递 no-cache 或更新 ETAG 或类似的东西来完成的,但似乎没有任何效果。这是我每次都在头部发送一个新日期以使其不缓存的尝试,但这不起作用。

var date = new Date().getTime() + 'x';
start({code: 200, headers: {'Content-Type': 'text/html', 'date': date}});

任何想法都非常感谢!

顺便说一句,我正在寻找纯沙发解决方案。

【问题讨论】:

    标签: caching couchdb


    【解决方案1】:

    所以经过更多的挖掘后,我发现了这个:

    http://wiki.apache.org/couchdb/Formatting_with_Show_and_List#ETags

    切入重要部分:

    • ETag 由 List 和 Shows 处理
    • 最高版本 1.2 您的用户必须具有角色,然后他们将获得不同的 ETag。
    • 1.3 将为每个用户名引入新的 ETag。

    希望这对某人有所帮助。

    【讨论】:

      【解决方案2】:

      幸运的是,CouchDB 源代码可用!我可以在couch_mrview_show.erl找到这个算法:

      show_etag(#httpd{user_ctx=UserCtx}=Req, Doc, DDoc, More) ->
          Accept = couch_httpd:header_value(Req, "Accept"),
          DocPart = case Doc of
              nil -> nil;
              Doc -> couch_httpd:doc_etag(Doc)
          end,
          couch_httpd:make_etag({couch_httpd:doc_etag(DDoc), DocPart, Accept,
              {UserCtx#user_ctx.name, UserCtx#user_ctx.roles}, More}).
      

      在这里我们可以看到节目被缓存,除非以下任何一项发生变化:

      • 设计文档,包含显示功能
      • 用于渲染节目的文档
      • “接受”HTTP 请求标头
      • 用户名(表示每个用户至少呈现一次节目)
      • 用户上下文中的用户角色集

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-06-01
        • 2016-02-01
        • 2018-11-07
        • 1970-01-01
        • 2014-05-05
        • 1970-01-01
        相关资源
        最近更新 更多