我正在尝试实现事务性StoreRelatedEntities。所以我需要从ITypedRedisClient访问RedisClient或者这个:
using (var trans1 = redis.As<X>().CreateTransaction())
using (var trans2= redis.As<Y>().CreateTransaction())
{
.....
trans1.Join(trans2); // :) Fantasy
trans2.Commit();
}
这是正确的方法吗?或者我必须
using (var trans1=redis.As<X>().CreateTransaction())
{
trans.QueueCommand(p => ((RedisClient)((RedisTypedClient<T>)p).NativeClient).AddRangeToList(.....);
}
或者我必须?
using (var trans=redis.CreateTransaction())
{
trans.QueueCommand(p=>p.As<X>()....); // Casting to Typed RedisClient in Command
trans.QueueCommand(p=>p.As<Y>()....);
}
答案 0 :(得分:1)
这看起来最简单,所以我会选择:
using (var trans=redis.CreateTransaction())
{
trans.QueueCommand(p=>p.As<X>()....); // Casting to Typed RedisClient in Command
trans.QueueCommand(p=>p.As<Y>()....);
}
但是没有正确/错误,只要你做得更舒服。每个客户端都继承或包含RedisNativeClient的实例,该实例封装了与Redis服务器的tcp套接字连接。不同类别之间的关系如下:
RedisNativeClient 实施IRedisNativeClient
RedisClient 继承 RedisNativeClient ,实施IRedisClient
RedisTypedClient 实施IRedisTypedClient