Я довольно новичок в Redis, и я его оцениваю. Я использую сервер Redis здесь: https://github.com/downloads/dmajkic/redis/redis-2.4.5-win32-win64.zipКлиент Redis/ServiceStack Сделки транзакций
Я также использую следующие конфигурации для сервера:
порта 6379 таймаута 300 сохранить 900 1 сохранить 300 10 сохранить 60 10000 LogLevel отладка логфайла STDOUT базы данных 1 MaxClients 32 maxmemory 2147483648
Я пытаюсь запустить код, как это использование ServiceStack клиента (ServiceStack-ServiceStack.Redis-4add28 а)
Вот мой код
public void InsertInsideTransaction(bool shouldTransactionRollback)
{
RedisClient transClient = new RedisClient("localhost");
ClearAll();
using (var trans = transClient.CreateTransaction())
{
trans.QueueCommand(r =>
{
var redisUsers = r.GetTypedClient<User>();
var sacha = new User { Id = redisUsers.GetNextSequence(), Name = "Sacha Barber" };
redisUsers.Store(sacha);
//redisUsers.Dispose();
});
//commit or rollback based on incoming flag
if (shouldTransactionRollback)
trans.Rollback();
else
trans.Commit();
IList<User> users = Users();
Console.WriteLine(string.Format("InsertInsideTransaction : There are currently {0}, Users", users.Count()));
}
}
Где Пользователь выглядит следующим образом (от одного из примеров, который поставляется с ServiceStack)
public class User
{
public User()
{
this.BlogIds = new List<long>();
}
public long Id { get; set; }
public string Name { get; set; }
public List<long> BlogIds { get; set; }
}
Я получаю это исключение, когда я пытаюсь совершить сделка
Неизвестный ответ на многоядерной запросу: 43QUEUED, Спорт: 60793, LastCommand: EXEC
at ServiceStack.Redis.RedisNativeClient.CreateResponseError (String error) в C: \ Users \ barbers \ Desktop \ Downloads \ ServiceStack-ServiceStack.Redis-4add28a \ ServiceStack-ServiceStack.Redis-4add28a \ src \ ServiceStack.Redis \ RedisNativeClient_Utils. cs: строка 146 в ServiceStack.Redis.RedisNativeClient.ReadMultiDataResultCount() в C: \ Users \ barbers \ Desktop \ Downloads \ ServiceStack-ServiceStack.Redis-4add28a \ ServiceStack-ServiceStack.Redis-4add28a \ src \ ServiceStack.Redis \ RedisNativeClient_Utils .cs: строка 578 на ServiceStack.Redis.Pipeline.QueuedRedisOperation.ProcessResult() в папке C: \ Users \ barbers \ Desktop \ Downloads \ ServiceStack-ServiceStack.Redis-4add28a \ ServiceStack-ServiceStack.Redis-4add28a \ src \ ServiceStack. Redis \ Pipeline \ QueuedRedisOperation.cs: строка 169 в ServiceStack.Redis.RedisTransaction.Commit() в C: \ Users \ barbers \ Desktop \ Downloads \ ServiceStack-ServiceStack.Redis-4add 28a \ ServiceStack-ServiceStack.Redis-4add28a \ src \ ServiceStack.Redis \ Transaction \ RedisTransaction.cs: строка 100 в DocumentDB.Redis.RedisMessAround.InsertInsideTransaction (Boolean shouldTransactionRollback) в C: \ Users \ barbers \ Desktop \ DocumentDBs \ DocumentDB .Redis \ RedisMessAround.cs: строка 63 в DocumentDB.Redis.Program.Run() в папке C: \ Users \ barbers \ Desktop \ DocumentDBs \ DocumentDB.Redis \ Program.cs: строка 45 в DocumentDB.Redis.Program. Main (String [] args) в C: \ Users \ barbers \ Desktop \ DocumentDBs \ DocumentDB.Redis \ Program.cs: строка 18 в System.AppDomain._nExecuteAssembly (сборка RuntimeAssembly, String [] args) в System.AppDomain .ExecuteAssembly (String assemblyFile, Evidence assemblySecurity, String [] args) в Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly() в Syste m.Threading.ThreadHelper.ThreadStart_Context (состояние объекта) на System.Threading.ExecutionContext.Run (ExecutionContext ExecutionContext, ContextCallback обратного вызова, состояние объекта, Boolean ignoreSyncCtx) на System.Threading.ExecutionContext.Run (ExecutionContext ExecutionContext, ContextCallback обратного вызова, объект состояние) в System.Threading.ThreadHelper.ThreadStart()
Я тогда подумал Ok ребята Redis ServiceStack он работает с использованием транзакций в своих модульных тестов, так что я редактировал «RedisTransactionTests», чем пришел с клиентом ServiceStack (ServiceStack -ServiceStack.Redis-4add28a) Я использую
Вот что я добавил к «RedisTransactionTests»
public class User
{
public User()
{
this.BlogIds = new List<long>();
}
public long Id { get; set; }
public string Name { get; set; }
public List<long> BlogIds { get; set; }
}
, где у меня есть этот отредактированный тестовый код
[Test]
[TestCase(true)]
[TestCase(false)]
public void TestUserTrans(bool shouldTransactionRollback)
{
int count = 0;
IRedisTransaction trans = Redis.CreateTransaction();
try
{
trans.QueueCommand(r =>
{
var redisUsers = r.GetTypedClient<User>();
var sacha = new User { Id = redisUsers.GetNextSequence(), Name = "Sacha Barber" };
redisUsers.Store(sacha);
});
//commit or rollback based on incoming flag
if (shouldTransactionRollback)
trans.Rollback();
else
trans.Commit();
}
catch (Exception ex)
{
}
IList<User> users = Users();
count = users.Count();
Console.WriteLine(string.Format("TestUserTrans : There are currently {0}, Users", users.Count()));
if (shouldTransactionRollback)
Assert.That(count == 0);
else
Assert.That(count == 1);
}
В там Exception, кажется, чтобы получить полностью проглатывание.
Что же я делаю неправильно
А гениальный, см. Сказал, что я новичок. Это меня разобрало, я обязательно прочитаю ссылки, которые вы разместили. Огромное спасибо – sacha