我使用Azure Redis服务实现了Redis OutputCache(Microsoft.Web.RedisOutputCacheProvider)。
在页面顶部需要缓存:
<%@ 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帮助程序。
欢迎任何帮助!
若埃尔
答案 0 :(得分:0)
根据您的描述,我尝试实现我的OutputCacheProvider将缓存存储到文件中以测试此问题。这是我的测试结果,你可以参考它。
我的Monitor.aspx的OutputCache
<%@ OutputCache VaryByParam="None" Duration="60" Location="Server" %>
访问上面的页面时,我会从OutputFileCacheProvider获取以下日志,如下所示:
当我访问另一个.aspx以清除缓存后,我的monitor.aspx页面中将刷新当前的DateTime字符串。
<%@ OutputCache VaryByParam="*" Duration="60" VaryByCustom="userhash" Location="Server" %>
注意:调用HttpResponse.RemoveOutputCacheItem("/monitor.aspx")
从另一个.aspx端点清除缓存的方法相同。
VaryByParam
和varyByCustom
都可以按预期工作。我假设您可以在OutputCacheProvider中添加日志,并尝试查找是否遗漏了某些内容。