Redis
 sql >> Teknologi Basis Data >  >> NoSQL >> Redis

Kumpulan StackExchange.Redis ConnectionMultiplexer untuk metode sinkron

Saya pikir Anda mulai bingung di sini. ConnectionMultiplexer tidak "diblokir". Membuat ConnectionMultiplexer memberi Anda objek seperti pabrik yang dengannya Anda dapat membuat IDatabase contoh. Anda kemudian menggunakan contoh ini untuk melakukan kueri Redis normal. Anda juga dapat melakukan kueri Redis dengan multiplexer koneksi itu sendiri, tetapi itu adalah kueri server dan tidak mungkin sering dilakukan.
Jadi, untuk mempersingkat, memiliki kumpulan multiplexer koneksi dapat sangat membantu, terlepas dari sinkronisasi /async/penggunaan campuran.

Untuk memperluas lebih jauh, inilah implementasi kumpulan yang sangat sederhana, yang tentunya dapat ditingkatkan lebih lanjut:

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. apa strategi terbaik untuk menyinkronkan data antara DB dan redis cache

  2. tidak dapat mematikan redis-server di linux

  3. Redis:Urutkan dan dapatkan n Kunci Tetangga

  4. Apakah pengaturan slave-read-only no akan membuat slave mengkonfirmasi setiap pencarian hash dengan master?

  5. Cara menerima pesan publikasi Redis di Go