如何获得使用expire_fragment的正确密钥?

时间:2016-05-05 17:36:59

标签: ruby-on-rails caching

我在Rails 4.x中使用片段缓存。

我在我的视图中使用类似的东西指定我自己的密钥:

<% cache "my-key" %>
      html
<% end %>

这会在我的Redis数据库中生成一个与此类似的键:

views/my-key/dca9add42d461d4c76103c08d12a6571

当我想要使这个键到期时,我在控制器中使用expire_fragment命令,如下所示:

expire_fragment("my-key")

但是这个命令只生成一个缓存键,如下所示:

views/my-key

我不明白的是,/dca9add42d461d4c76103c08d12a6571部分是什么?

原始cache命令如何不产生它,或者当我想要使片段过期时如何重现/dca9add42d461d4c76103c08d12a6571后缀。

2 个答案:

答案 0 :(得分:0)

根据Rails文档,您只需将密钥作为字符串传递:

MyController.new.expire_fragment 'my-key'

http://guides.rubyonrails.org/caching_with_rails.html#fragment-caching

如果您从命令行执行此操作,则可能必须通过以下任何控制器来呈现视图:

{{1}}

答案 1 :(得分:0)

我不确定这是否是设计的,或者Rails中是否存在错误。但是当我在我的视图中使用缓存命令时,正在发生的后缀Firebase *rootRef = [[Firebase alloc] initWithUrl:@"https://example.firebaseio.com]; Firebase *locCoordsRef = [rootRef childByAppendingPath("Location_Coordinates"); Firebase *locDataRef = [locCoordsRef childByAppendingPath("LOCATION DATA"]; NSString *uid = rootRef.authData.uid Firebase *thisUserRef = [locDataRef childByAppendingPath(uid)]; NSDictionary *userDataDict = @{ @"DATE": dateString, @"Lat": @(location.coordinate.latitude), @"Long": @(location.coordinate.longitude), @"USER": name, }; Firebase *dataRef = [thisUserRef childByAutoId]; [dataRef setValue: userDataDict]; 被添加到缓存键的末尾,是摘要,您可以跳过通过这样调用缓存:

/dca9add42d461d4c76103c08d12a6571

这样,后缀(摘要)就会从密钥中删除。

现在,我认为可能存在错误(?),是<% cache("my-key", { :skip_digest: true }) %> html <% end %> 命令没有摘要添加到密钥的结尾 - 所以我从来没有真正结束我的片段。

我现在的答案是 - 如果我想手动使它们过期,请使用expire_fragment