我在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
后缀。
答案 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
。