无法连接到redis服务器;创建断开的多路复用器

时间:2015-06-17 15:07:59

标签: c# azure azure-redis-cache

我有以下代码连接到azure redis缓存。

   public class CacheConnectionHelper
    {
        private static Lazy<ConnectionMultiplexer> lazyConnection = new Lazy<ConnectionMultiplexer>(() =>
        {
            return ConnectionMultiplexer.Connect(SettingsHelper.AzureRedisCache);
        });

        public static ConnectionMultiplexer Connection
        {
            get
            {
                return lazyConnection.Value;
            }
        }
    }

我用这种方式

public static List<Models.Module> GetModules()
        {
            IDatabase cache = CacheConnectionHelper.Connection.GetDatabase();
            List<Models.Module> listOfModules = new List<Models.Module>();
            listOfModules = (List<Models.Module>)cache.Get("ApplicationModules");
            if (listOfModules == null)
            {
                listOfModules = dbApp.Modulos.ToList();
                cache.Set("ApplicationModules", listOfModules, TimeSpan.FromMinutes(SettingsHelper.CacheModuleNames));
                return listOfModules;
            }
            else {
                return listOfModules;
            }
        }

然而,每天1或2次我得到这个例外:

 Additional information: It was not possible to connect to the redis server(s); to create a disconnected multiplexer, disable AbortOnConnectFail. UnableToResolvePhysicalConnection on PING

问题是如果缓存连接失败,如何重构此代码以转到数据库?

7 个答案:

答案 0 :(得分:47)

您获得的错误通常表示您未在连接字符串中设置 abortConnect = false abortConnect 的默认值为 true ,这使得 StackExchange.Redis 在某些条件下无法自动重新连接到服务器。我们强烈建议您在连接字符串中设置 abortConnect = false ,以便在发生网络故障时 SE.Redis 将在后台自动重新连接。

答案 1 :(得分:12)

对于潜入其他代码的初学者来说,面对这个问题:

Observable

答案 2 :(得分:1)

此问题已在新版本1.2.6中得到解决 - 您可以在Here中看到

答案 3 :(得分:1)

对于那些维护较旧代码库的用户,您可能会遇到“无法连接到Redis服务器;要创建断开的多路复用器,请禁用AbortOnConnectFail。PING上的UnableToResolvePhysicalConnection”

一旦我升级到较新的nuget软件包,该错误仍然存​​在,但是我得到了更多错误信息:“客户端和服务器无法通信,因为它们不具有通用算法”。

一旦我应用了提到的here注册表项,我就没事了。对于那些不希望进行全球更改的人,我相信已经有了PR的设置。

答案 4 :(得分:0)

您还应该注意错误消息的最后一部分,因为它似乎提供了有关连接失败原因的非常有用的详细信息。

在你的情况下:

无法连接到redis服务器;要创建断开连接的多路复用器,请禁用AbortOnConnectFail。 PING UnableToResolvePhysicalConnection

我的情况:

无法连接到redis服务器;要创建断开连接的多路复用器,请禁用AbortOnConnectFail。的超时

答案 5 :(得分:0)

我通过将连接字符串从localhost:6379更改为127.0.0.1:6379来解决此问题

答案 6 :(得分:0)

对我来说,连接字符串不正确。添加正确的连接字符串详细信息可用于stackexchange.redis 2.1.58