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

StackExchange.Redis ConnectionMultiplexer पूल सिंक्रोनस विधियों के लिए

मुझे लगता है कि आप यहाँ भ्रमित हो रहे हैं। ConnectionMultiplexer "अवरुद्ध" नहीं होता है। एक ConnectionMultiplexer बनाना आपको फ़ैक्टरी जैसी वस्तु देता है जिससे आप IDatabase . बना सकते हैं उदाहरण। फिर आप इन उदाहरणों का उपयोग सामान्य रेडिस प्रश्नों को करने के लिए करते हैं। आप कनेक्शन मल्टीप्लेक्सर के साथ रेडिस क्वेरी भी कर सकते हैं, लेकिन वे सर्वर क्वेरी हैं और अक्सर किए जाने की संभावना नहीं है। /async/मिश्रित उपयोग।

आगे विस्तार करने के लिए, यहां एक बहुत ही सरल पूल कार्यान्वयन है, जिसे निश्चित रूप से और बढ़ाया जा सकता है:

public interface IConnectionMultiplexerPool
{
    Task<IDatabase> GetDatabaseAsync();
}

public class ConnectionMultiplexerPool : IConnectionMultiplexerPool
{
    private readonly ConnectionMultiplexer[] _pool;
    private readonly ConfigurationOptions _redisConfigurationOptions;

    public ConnectionMultiplexerPool(int poolSize, string connectionString) : this(poolSize, ConfigurationOptions.Parse(connectionString))
    {
    }

    public ConnectionMultiplexerPool(int poolSize, ConfigurationOptions redisConfigurationOptions)
    {
        _pool = new ConnectionMultiplexer[poolSize];
        _redisConfigurationOptions = redisConfigurationOptions;
    }

    public async Task<IDatabase> GetDatabaseAsync()
    {
        var leastPendingTasks = long.MaxValue;
        IDatabase leastPendingDatabase = null;

        for (int i = 0; i < _pool.Length; i++)
        {
            var connection = _pool[i];

            if (connection == null)
            {
                _pool[i] = await ConnectionMultiplexer.ConnectAsync(_redisConfigurationOptions);

                return _pool[i].GetDatabase();
            }

            var pending = connection.GetCounters().TotalOutstanding;

            if (pending < leastPendingTasks)
            {
                leastPendingTasks = pending;
                leastPendingDatabase = connection.GetDatabase();
            }
        }

        return leastPendingDatabase;
    }
}



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Redis और Node.js और Socket.io प्रश्न

  2. Redis को एक ईवेंट सांख्यिकी स्टोर के रूप में उपयोग करना चाहते हैं

  3. रेडिस आरडीबी और एओएफ को कैसे निष्क्रिय करें?

  4. पायथन-आरक्यू कार्यकर्ता स्वचालित रूप से बंद हो जाता है

  5. सर्विसस्टैक रेडिस क्लाइंट में सत्यापन के साथ ट्रांजेक्शनल क्रिएट