2012-07-15 40 views
2

我試圖使用C#ServiceStack將多個新實體插入到Redis中。我遇到的問題是生成序列號。如何使用Redis ServiceStack使用事務時創建多個序列號

從我讀過的內容可以看出,在將事務命令排隊到garauntee時,無法發出其他請求。

這將意味着必須迭代我的實體集合以首先生成序列號,然後再次迭代以排列事務命令並執行?

有沒有這樣做的有效方式?

IRedisClientsManager RedisManager; 

RedisManager.ExecTrans(x => 
{ 
    foreach (var entity in entities) 
    { 
     x.QueueCommand(c => 
     { 
      //entity.Id = generate sequence number 
      c.Store(entity); 
     }); 
    } 
    x.Commit(); 
}); 
+0

會發生什麼事,如果你不手動設置標識,將自動Redis的設置它? – oleksii 2012-07-15 08:49:35

+0

我需要在該點使用Id更新對象。否則,需要再次往返才能更新ID。 – David 2012-07-15 08:50:44

回答

1

您可以預先獲取一批序列ID,然後將它們分配給您的模型。您也可以使用StoreAll(),它利用Redis的批處理MSET操作,以便所有模型都可以在相同的操作中執行/存儲。

鑑於此,我想上面重新寫的東西,如:

RedisManager.ExecAs<TEntity>(r => { 
    var maxSeqId = r.GetNextSequence(entities.Count); 
    var newId = maxSeqId - entities.Count; 
    entities.ForEach(x => x.Id = newId++); 
    r.StoreAll(entities); 
}); 
相關問題