ASP.NET Redis 的输出缓存提供程序不存储
ASP.NET Output Cache Provider for Redis doesn't store
我不确定如何解决它,但我正在尝试通过 Redis 输出缓存提供程序实施 ASP.NET 输出缓存。
我们设置了 Redis 服务器(非 Azure),我可以存储缓存以供一般使用。
但是,当我尝试设置 ASP.NET 输出缓存时,它似乎没有将任何内容保存到缓存中!
我已经通过 Nuget 安装了 Microsoft.Web.RedisOutputCacheProvider。
Web.Config 设置如下:
<caching>
<outputCache defaultProvider="MyRedisOutputCache">
<providers>
<add name="MyRedisOutputCache" type="Microsoft.Web.Redis.RedisOutputCacheProvider" host="ServerName" port="6464" accessKey="PasswordToRedis" />
</providers>
</outputCache>
</caching>
MVC 控制器设置有 OutputCache 属性:
[OutputCache(Duration = 3600, VaryByParam = "*", Location = OutputCacheLocation.ServerAndClient)]
public JsonResult GetLookupData()
当我检查 Redis 时,我没有看到任何 OutputCache 被存储。
我错过了什么吗?有没有办法调试它为什么不在缓存中存储任何内容?
好吧,这真的很傻。
当您通过 Nuget 安装 RedisOutputCacheProvider 时,您将在 app/web.config:
中得到这个小 doco
<!-- For more details check https://github.com/Azure/aspnet-redis-providers/wiki --><!-- Either use 'connectionString' OR 'settingsClassName' and 'settingsMethodName' OR use 'host','port','accessKey','ssl','connectionTimeoutInMilliseconds' and 'operationTimeoutInMilliseconds'. --><!-- 'databaseId' and 'applicationName' can be used with both options. --><!--
<add name="MyRedisOutputCache"
host = "127.0.0.1" [String]
port = "" [number]
accessKey = "" [String]
ssl = "false" [true|false]
databaseId = "0" [number]
applicationName = "" [String]
connectionTimeoutInMilliseconds = "5000" [number]
operationTimeoutInMilliseconds = "1000" [number]
connectionString = "<Valid StackExchange.Redis connection string>" [String]
settingsClassName = "<Assembly qualified class name that contains settings method specified below. Which basically return 'connectionString' value>" [String]
settingsMethodName = "<Settings method should be defined in settingsClass. It should be public, static, does not take any parameters and should have a return type of 'String', which is basically 'connectionString' value.>" [String]
loggingClassName = "<Assembly qualified class name that contains logging method specified below>" [String]
loggingMethodName = "<Logging method should be defined in loggingClass. It should be public, static, does not take any parameters and should have a return type of System.IO.TextWriter.>" [String]
redisSerializerType = "<Assembly qualified class name that implements Microsoft.Web.Redis.ISerializer>" [String]
/>
它表示 "ssl" 的默认值为 false。
但是,阅读代码本身,它实际上默认为 true.
因此明确地将 ssl 设置为 false 已修复它。
编辑
哦,我不得不将 RedisOutputCacheProvider 降级到 1.7.5。
3.0.1 对我来说根本不起作用。
我在没有 SSL 设置的本地主机上工作。在生产中我需要它,但在我的身上它是连接字符串的一部分(我的 Redis 托管服务给了我)。
它无法正常工作而您必须将 RedisOutputCacheProvider 降级到 1.7.5 的原因是您使用的是 Exchange.Redis.Strongname.dll(版本 1.2.6)
根据这个问题,Redis 不再需要强名称,因为基础版本现在是强名称。
https://github.com/Azure/aspnet-redis-providers/issues/107
因此,要使用 RedisOutputCacheProvider v3.0.144,您需要卸载 Exchange.Redis.Strongname.dll(版本 1.2.6)并通过 Nuget
安装 Exchange.Redis.dll(版本 2.0.601)
我不确定如何解决它,但我正在尝试通过 Redis 输出缓存提供程序实施 ASP.NET 输出缓存。
我们设置了 Redis 服务器(非 Azure),我可以存储缓存以供一般使用。 但是,当我尝试设置 ASP.NET 输出缓存时,它似乎没有将任何内容保存到缓存中!
我已经通过 Nuget 安装了 Microsoft.Web.RedisOutputCacheProvider。 Web.Config 设置如下:
<caching>
<outputCache defaultProvider="MyRedisOutputCache">
<providers>
<add name="MyRedisOutputCache" type="Microsoft.Web.Redis.RedisOutputCacheProvider" host="ServerName" port="6464" accessKey="PasswordToRedis" />
</providers>
</outputCache>
</caching>
MVC 控制器设置有 OutputCache 属性:
[OutputCache(Duration = 3600, VaryByParam = "*", Location = OutputCacheLocation.ServerAndClient)]
public JsonResult GetLookupData()
当我检查 Redis 时,我没有看到任何 OutputCache 被存储。
我错过了什么吗?有没有办法调试它为什么不在缓存中存储任何内容?
好吧,这真的很傻。
当您通过 Nuget 安装 RedisOutputCacheProvider 时,您将在 app/web.config:
中得到这个小 doco<!-- For more details check https://github.com/Azure/aspnet-redis-providers/wiki --><!-- Either use 'connectionString' OR 'settingsClassName' and 'settingsMethodName' OR use 'host','port','accessKey','ssl','connectionTimeoutInMilliseconds' and 'operationTimeoutInMilliseconds'. --><!-- 'databaseId' and 'applicationName' can be used with both options. --><!--
<add name="MyRedisOutputCache"
host = "127.0.0.1" [String]
port = "" [number]
accessKey = "" [String]
ssl = "false" [true|false]
databaseId = "0" [number]
applicationName = "" [String]
connectionTimeoutInMilliseconds = "5000" [number]
operationTimeoutInMilliseconds = "1000" [number]
connectionString = "<Valid StackExchange.Redis connection string>" [String]
settingsClassName = "<Assembly qualified class name that contains settings method specified below. Which basically return 'connectionString' value>" [String]
settingsMethodName = "<Settings method should be defined in settingsClass. It should be public, static, does not take any parameters and should have a return type of 'String', which is basically 'connectionString' value.>" [String]
loggingClassName = "<Assembly qualified class name that contains logging method specified below>" [String]
loggingMethodName = "<Logging method should be defined in loggingClass. It should be public, static, does not take any parameters and should have a return type of System.IO.TextWriter.>" [String]
redisSerializerType = "<Assembly qualified class name that implements Microsoft.Web.Redis.ISerializer>" [String]
/>
它表示 "ssl" 的默认值为 false。 但是,阅读代码本身,它实际上默认为 true.
因此明确地将 ssl 设置为 false 已修复它。
编辑
哦,我不得不将 RedisOutputCacheProvider 降级到 1.7.5。
3.0.1 对我来说根本不起作用。
我在没有 SSL 设置的本地主机上工作。在生产中我需要它,但在我的身上它是连接字符串的一部分(我的 Redis 托管服务给了我)。
它无法正常工作而您必须将 RedisOutputCacheProvider 降级到 1.7.5 的原因是您使用的是 Exchange.Redis.Strongname.dll(版本 1.2.6)
根据这个问题,Redis 不再需要强名称,因为基础版本现在是强名称。 https://github.com/Azure/aspnet-redis-providers/issues/107
因此,要使用 RedisOutputCacheProvider v3.0.144,您需要卸载 Exchange.Redis.Strongname.dll(版本 1.2.6)并通过 Nuget
安装 Exchange.Redis.dll(版本 2.0.601)