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

ServiceStack.Redis Tidak dapat membaca transport - BasicRedisClientManager

Anda tidak boleh menyimpan instance tunggal RedisClient atau IRedisTypedClient<BarSet> yang keduanya merangkum Koneksi Redis TCP non-thread-safe. Sebagai gantinya, Anda dapat menyimpan instance tunggal IRedisClientsManager - yang tujuannya untuk menyediakan Pabrik Klien Redis yang aman untuk thread (seperti Kumpulan Koneksi DB).

Jika Anda juga menggunakan ServiceStack Services, lebih mudah untuk mendaftarkan dependensi di IOC ServiceStack jadi IRedisClientsManager dapat disuntikkan seperti ketergantungan lainnya, misalnya di AppHost.Configure() :

container.Register<IRedisClientsManager>(c =>
    new BasicRedisClientManager("[email protected]:6379"));

Ini akan memungkinkan Anda untuk menggunakan base.Redis Properti RedisClient di Layanan ServiceStack Anda, mis:

public class JmaSetsService : Service
{
    public object Get(JmaSets request)
    {
        var redisBarSets = base.Redis.As<BarSet>();
        return redisBarSets.Lists[instument_key].GetAll();
    }
}

Jika Anda menggunakan base.Redis Anda tidak perlu membuang RedisClient secara eksplisit karena sudah dibuang secara otomatis oleh Layanan, yaitu:

public class Service
{
    ...

    public virtual void Dispose()
    {
        if (redis != null)
            redis.Dispose();
        ...
    }
}

Anda juga dapat menyuntikkan IRedisClientsManager ke dalam kelas Anda sendiri seperti ketergantungan lainnya menggunakan properti publik atau argumen Konstruktor, mis:

public class RedisBarSetData
{
    public virtual IRedisClientsManager RedisManager { get; set; }

    private IRedisClient redis;
    public virtual IRedisClient Redis
    {
        get { return redis ?? (redis = RedisManager.GetClient()); }
    }

    public override void Dispose()
    {
        if (redis != null)
            redis.Dispose();
    }

    public List<BarSet> getData(BarSets data)
    {
        setKeys(data);  // instrument_key is set in here
        return Redis.As<BarSet>().Lists[instrument_key].GetAll();
    }
}

Yang kemudian dapat Anda daftarkan dan autowire di IOC ServiceStack dengan:

container.RegisterAutoWired<RedisBarSetData>();

Yang kemudian akan memungkinkan Anda menggunakannya sebagai ketergantungan di Layanan Anda:

public class JmaSetsService : Service
{
    public RedisBarSetData RedisBarSetData { get; set; }

    public object Get(JmaSets request)
    {
        return RedisBarSetData.getData(new BarSets(request));
    }
}

Alternatif untuk membuat kelas dasar Anda sendiri adalah dengan mewarisi dari kelas dasar LogicBase yang sudah ada sebelumnya, yang sudah memiliki IRedisClientsManager properti dan di atas boilerplate.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Pendekatan untuk menyimpan data geospasial di Redis

  2. UI Web Logstash tidak dimulai

  3. apakah hibernate-redis mendukung cache level 2 yang dibagikan oleh instance hibernate yang berbeda?

  4. Redis - Kumpulan yang diurutkan, temukan item berdasarkan nilai properti

  5. Tidak dapat memuat file atau rakitan System.Runtime.CompilerServices.Unsafe