Redis
 sql >> डेटाबेस >  >> NoSQL >> Redis

BookSleeve का उपयोग करके एक खुला रेडिस कनेक्शन बनाए रखना

चूंकि मुझे कोई अच्छा जवाब नहीं मिला है, इसलिए मैं इस समाधान के साथ आया (बीटीडब्ल्यू धन्यवाद @Simon और @Alex आपके उत्तरों के लिए!)।

मैं इसे एक संदर्भ के रूप में सभी समुदाय के साथ साझा करना चाहता हूं। बेशक, किसी भी सुधार की अत्यधिक सराहना की जाएगी।

using System;
using System.Net.Sockets;
using BookSleeve;

namespace Redis
{
    public sealed class RedisConnectionGateway
    {
        private const string RedisConnectionFailed = "Redis connection failed.";
        private RedisConnection _connection;
        private static volatile RedisConnectionGateway _instance;

        private static object syncLock = new object();
        private static object syncConnectionLock = new object();

        public static RedisConnectionGateway Current
        {
            get
            {
                if (_instance == null)
                {
                    lock (syncLock)
                    {
                        if (_instance == null)
                        {
                            _instance = new RedisConnectionGateway();
                        }
                    }
                }

                return _instance;
            }
        }

        private RedisConnectionGateway()
        {
            _connection = getNewConnection();
        }

        private static RedisConnection getNewConnection()
        {
            return new RedisConnection("127.0.0.1" /* change with config value of course */, syncTimeout: 5000, ioTimeout: 5000);
        }

        public RedisConnection GetConnection()
        {
            lock (syncConnectionLock)
            {
                if (_connection == null)
                    _connection = getNewConnection();

                if (_connection.State == RedisConnectionBase.ConnectionState.Opening)
                    return _connection;

                if (_connection.State == RedisConnectionBase.ConnectionState.Closing || _connection.State == RedisConnectionBase.ConnectionState.Closed)
                {
                    try
                    {
                        _connection = getNewConnection();
                    }
                    catch (Exception ex)
                    {
                        throw new Exception(RedisConnectionFailed, ex);
                    }
                }

                if (_connection.State == RedisConnectionBase.ConnectionState.Shiny)
                {
                    try
                    {
                        var openAsync = _connection.Open();
                        _connection.Wait(openAsync);
                    }
                    catch (SocketException ex)
                    {
                        throw new Exception(RedisConnectionFailed, ex);
                    }
                }

                return _connection;
            }
        }
    }
}


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. होस्ट मशीन से डॉकर कंटेनर में चल रहे रेडिस से कनेक्ट करना

  2. Node.js मल्टी-सर्वर क्लस्टर:ऑब्जेक्ट को कई नोड्स क्लस्टर में कैसे साझा करें

  3. कमांड लाइन के माध्यम से हरोकू रेडिस से सुरक्षित रूप से कैसे जुड़ें?

  4. डोकर-लिखें:कंटेनरों के बीच रेडिस कनेक्शन से इनकार कर दिया

  5. स्प्रिंग बूट + रेडिस