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.