使用StackExchange.Redis

时间:2017-03-15 01:57:10

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

我正在尝试使用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'。”}

     

at Microsoft.Win32.RegistryKey.Win32Error(Int32 errorCode,String   str)at Microsoft.Win32.RegistryKey.InternalGetValue(String name,   对象defaultValue,Boolean doNotExpand,Boolean checkSecurity)at   Microsoft.Win32.RegistryKey.GetValue(String name)at   System.Diagnostics.PerformanceMonitor.GetData(String item)at   System.Diagnostics.PerformanceCounterLib.GetPerformanceData(字符串   项目)   System.Diagnostics.PerformanceCounterLib.GetCategorySample(字符串   类别)   System.Diagnostics.PerformanceCounterLib.GetCategorySample(字符串   机器,字符串类别)at   System.Diagnostics.PerformanceCounter.NextSample()at   System.Diagnostics.PerformanceCounter.NextValue()at   StackExchange.Redis.PerfCounterHelper.TryGetSystemCPU(Single& value)
  在StackExchange.Redis.ConnectionMultiplexer.GetSystemCpuPercent()
  在   StackExchange.Redis.ConnectionMultiplexer.GetThreadPoolAndCPUSummary()   at StackExchange.Redis.ExceptionFactory.NoConnectionAvailable(Boolean   includeDetail,RedisCommand命令,消息消息,ServerEndPoint   server,ServerEndPoint [] serverSnapshot)at   StackExchange.Redis.ConnectionMultiplexer.ExecuteSyncImpl [T](消息   消息,ResultProcessor 1 processor, ServerEndPoint server) at StackExchange.Redis.RedisBase.ExecuteSync[T](Message message, ResultProcessor 1处理器,ServerEndPoint服务器)at   StackExchange.Redis.RedisDatabase.StringGet(RedisKey key,CommandFlags   cacheManager.Get [T](String key)

的标志

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

有任何建议如何解决这个问题?

2 个答案:

答案 0 :(得分:0)

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

  

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

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

答案 1 :(得分:0)

这个callstack的有趣部分在这里:

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

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