如何使用:HttpResponse.RemoveOutputCacheItem在使用varyByCustom时

时间:2017-03-02 09:15:34

标签: asp.net redis outputcache azure-redis-cache

我使用Azure Redis服务实现了Redis OutputCache(Microsoft.Web.RedisOutputCacheProvider)。

我找到了类似的未答复/未解决的问题herehere

在页面顶部需要缓存:     <%@ OutputCache VaryByParam="*" Duration="600" %>

访问随机页面后,我检查Redis数据库中的密钥已保存为:/ _ a2 /monitor.aspx

因此运行以下代码行将删除此缓存项(并且它可以工作)。

HttpResponse.RemoveOutputCacheItem("/monitor.aspx", "RedisOutputCache")

现在我已经更新了相同的页面,添加了varyByCustom和OutputCache指令:     <%@ OutputCache VaryByParam="*" varyByCustom="userhash" Duration="600" %>

现在访问该页面并检查Redis数据库中的密钥,它保存如下:/ _ a2 /monitor.aspxHQFCNuserhashVcc6ef5b7173286704cef942d5577b88bd81f2cce71a0dcdc8676d3a815e68b59DE

您会看到添加的userhash哈希值,这很好并按预期工作。

但现在出现了问题:如何清除此缓存项目。

这不起作用:

`HttpResponse.RemoveOutputCacheItem("/monitor.aspx", "RedisOutputCache")`

还尝试过:     HttpResponse.RemoveOutputCacheItem("/monitor.aspx?userhash=cc6ef5b7173286704cef942d5577b88bd81f2cce71a0dcdc8676d3a815e68b59", "RedisOutputCache")

并尝试过:     HttpResponse.RemoveOutputCacheItem("/monitor.aspx {userhash:cc6ef5b7173286704cef942d5577b88bd81f2cce71a0dcdc8676d3a815e68b59}", "RedisOutputCache")

还尝试结合以上代码使用以下某些选项:

Response.Cache.SetVaryByCustom("userhash")
Response.AddCacheItemDependency("action")
HttpContext.Current.Cache.Item("action") = "test"
Response.Cache.VaryByParams("userhash") = True
HttpResponse.RemoveOutputCacheItem("/monitor.aspx")

有没有办法在使用varyByCustom选项时删除此缓存项?

我不使用system.web.mvc对象。所以我无法访问此对象以获取URL帮助程序。

欢迎任何帮助!

若埃尔

1 个答案:

答案 0 :(得分:0)

根据您的描述,我尝试实现我的OutputCacheProvider将缓存存储到文件中以测试此问题。这是我的测试结果,你可以参考它。

我的Monitor.aspx的

OutputCache

<%@ OutputCache VaryByParam="None" Duration="60" Location="Server" %>

访问上面的页面时,我会从OutputFileCacheProvider获取以下日志,如下所示:

enter image description here

当我访问另一个.aspx以清除缓存后,我的monitor.aspx页面中将刷新当前的DateTime字符串。

<%@ OutputCache VaryByParam="*" Duration="60" VaryByCustom="userhash" Location="Server" %>

注意:调用HttpResponse.RemoveOutputCacheItem("/monitor.aspx")从另一个.aspx端点清除缓存的方法相同。

enter image description here

VaryByParamvaryByCustom都可以按预期工作。我假设您可以在OutputCacheProvider中添加日志,并尝试查找是否遗漏了某些内容。