Redis连接可能无法使用c#关闭

Pet*_*ner 6 azure redis servicestack.redis azure-redis-cache

我正在连接到Azure Redis,并且它们向我显示了与我的Redis服务器的打开连接数。我有下面的c#代码,其中包含我所有的Redis集和获取。这应该是泄漏的连接吗?

       using (var connectionMultiplexer = ConnectionMultiplexer.Connect(connectionString))
        {

            lock (Locker)
            {
                redis = connectionMultiplexer.GetDatabase();
            }

            var o = CacheSerializer.Deserialize<T>(redis.StringGet(cacheKeyName));
            if (o != null)
            {
                return o;
            }
            lock (Locker)
            {
                // get lock but release if it takes more than 60 seconds to complete to avoid deadlock if this app crashes before release
                //using (redis.AcquireLock(cacheKeyName + "-lock", TimeSpan.FromSeconds(60)))

                var lockKey = cacheKeyName + "-lock";
                if (redis.LockTake(lockKey, Environment.MachineName, TimeSpan.FromSeconds(10)))
                {
                    try
                    {
                        o = CacheSerializer.Deserialize<T>(redis.StringGet(cacheKeyName));
                        if (o == null)
                        {
                            o = func();
                            redis.StringSet(cacheKeyName, CacheSerializer.Serialize(o),
                                TimeSpan.FromSeconds(cacheTimeOutSeconds));
                        }
                        redis.LockRelease(lockKey, Environment.MachineName);
                        return o;
                    }
                    finally
                    {
                        redis.LockRelease(lockKey, Environment.MachineName);
                    }
                }
                return o;
            }

        }
    }
Run Code Online (Sandbox Code Playgroud)

Vla*_*hov 5

您可以将connectionMultiplexer保留在静态变量中,而不是为每个get / set创建它。这样一来,与Redis的连接就会一直保持打开状态,从而可以更快地进行操作。

更新:请看看StackExchange.Redis的基本用法:https : //github.com/StackExchange/StackExchange.Redis/blob/master/Docs/Basics.md

“请注意,ConnectionMultiplexer实现了IDisposable,可以在不再需要时进行处理,但是我故意不显示使用语句的用法,因为您很少希望短暂使用ConnectionMultiplexer,因为这种想法是重用此对象, 。

它对我来说很好用,保持与Azure Redis的单一连接(有时创建2个连接,但这是设计使然)。希望对您有帮助。

  • 这就是我最初的情况,当我只有一个测试时,我的显示器显示了 100 个打开的连接 (2认同)