【问题标题】:Error connection to Azure Redis Cache using StackExchange.Redis使用 StackExchange.Redis 连接到 Azure Redis 缓存时出错
【发布时间】:2017-03-15 01:57:10
【问题描述】:

我正在尝试使用 StackExchange.Redis.StrongName V1.2.1 连接到 Azure Redis 缓存

我的代码是这样的

string redisServer = ConfigManager.GetValue("RedisServer");
redis = ConnectionMultiplexer.Connect(redisServer);
redisDB = redis.GetDatabase();          
var serializedValue = redisDB.StringGet(key);

最后一行总是抛出这个异常

{“拒绝访问注册表项‘238’。”}

在 Microsoft.Win32.RegistryKey.Win32Error(Int32 errorCode, String str) 在 Microsoft.Win32.RegistryKey.InternalGetValue(字符串名称, 对象 defaultValue、布尔值 doNotExpand、布尔值 checkSecurity)在 Microsoft.Win32.RegistryKey.GetValue(字符串名称)在 System.Diagnostics.PerformanceMonitor.GetData(字符串项)在 System.Diagnostics.PerformanceCounterLib.GetPerformanceData(字符串 项目)在 System.Diagnostics.PerformanceCounterLib.GetCategorySample(字符串 类别)在 System.Diagnostics.PerformanceCounterLib.GetCategorySample(字符串 机,字符串类别)在 System.Diagnostics.PerformanceCounter.NextSample() 在 System.Diagnostics.PerformanceCounter.NextValue() 在 StackExchange.Redis.PerfCounterHelper.TryGetSystemCPU(单个&值)
在 StackExchange.Redis.ConnectionMultiplexer.GetSystemCpuPercent()
在 StackExchange.Redis.ConnectionMultiplexer.GetThreadPoolAndCPUSummary() 在 StackExchange.Redis.ExceptionFactory.NoConnectionAvailable(布尔 includeDetail、RedisCommand 命令、Message 消息、ServerEndPoint 服务器,ServerEndPoint[] serverSnapshot) 在 StackExchange.Redis.ConnectionMultiplexer.ExecuteSyncImpl[T](消息 消息,ResultProcessor1 processor, ServerEndPoint server) at StackExchange.Redis.RedisBase.ExecuteSync[T](Message message, ResultProcessor1 处理器,ServerEndPoint 服务器)在 StackExchange.Redis.RedisDatabase.StringGet(RedisKey 键,CommandFlags flags) 在 CacheManager.Get[T](String key)

使用本地 Redis 缓存服务器时,相同的代码也可以正常工作。

有什么建议可以解决这个问题吗?

【问题讨论】:

标签: c# azure redis stackexchange.redis azure-redis-cache


【解决方案1】:

根据您的描述,我已经通过创建一个控制台应用程序和一个 Web 应用程序来测试这个问题,这两个应用程序都以 .NET 框架 4.5 为目标,通过引用 StackExchange.Redis 1.2.1StackExchange.Redis.StrongName 1.2.1 从 Azure Redis 缓存设置/获取键值,它可以按我的预期工作。

使用本地 Redis 缓存服务器时,相同的代码也可以正常工作。

根据您的代码,IDatabase.StringGet 引发了异常,我假设您可以尝试检查您的 Azure Redis 缓存连接字符串并按照官方tutorial 关于连接到 Azure Redis 缓存。或者您可以提供更多关于您的场景的详细信息(例如您的托管环境等),以便我们更好地帮助您定位和解决此问题。

【讨论】:

  • 显然问题是某些防火墙阻止了指定端口。
【解决方案2】:

这个调用栈的有趣部分在这里:

StackExchange.Redis.PerfCounterHelper.TryGetSystemCPU(Single& value)

上面的代码试图实例化一个 PerformanceCounter 对象,以便它可以查询本地系统的 CPU 使用率。最后我检查了一下,该代码捕获了所有异常,因为它知道某些环境不允许您创建 PerformanceCounters。该异常不应出现在您的应用程序中。如果该异常正在冒泡到您的应用层,那么这将是 StackExchange.Redis 中的回归,并且应该在那里提交修复。

【讨论】:

猜你喜欢
  • 2020-04-20
  • 2016-12-03
  • 2020-06-06
  • 2014-07-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-22
  • 1970-01-01
相关资源
最近更新 更多