2012-06-01 60 views
2

用戶具有DisplayName,並且它對用戶是唯一的。在ServiceStack Redis客戶端中使用驗證創建事務

我要創建用戶,但首先我要檢查顯示名稱(顯示名稱無法複製的用戶)

我檢查ServiceStack例子,我看不出與驗證檢查事務插入/更新。

我該如何執行它。我不想爲redis db編寫「驗證任務」。 我不想在數據庫中出現不一致。

回答

2

ServiceStack.Redis客戶確實有Redis的的WATCHtransactions當這些Redis命令支持:

WATCH mykey 
test = EXIST mykey 
MULTI 
SET mykey $val 
EXEC 

能以實現:

var redis = new RedisClient(); 
redis.Watch("mykey"); 
if (!redis.ContainsKey("mykey")) return; 

using (var trans = redis.CreateTransaction()) { 
    trans.QueueCommand(r => r.Set("mykey", "val")); 
    trans.Commit(); 
} 
+0

需求正在檢查交易中的密鑰,但在交易之前完成。作爲示例https://github.com/ServiceStack/ServiceStack/blob/master/src/ServiceStack.ServiceInterface/Auth/RedisAuthRepository.cs。 AssertNoExistingUser和Store操作在CreateUserAuth方法中必須是事務性的。 – ozz

+0

RedisAuthRepository可以存儲兩個具有相同顯示名稱的新用戶。 – ozz

+0

閱讀Redis Transactions(http://redis.io/topics/transactions),WATCH會影響下一個後續事務。即如果在WATCH命令和事務之間修改了任何**觀看的鍵**,則事務不會被執行並拋出異常。 – mythz

2

是否可以執行redis事務。更多信息here

WATCH mykey 
test = EXIST mykey 
MULTI 
SET mykey $val 
EXEC 

使用PHP有UM更好的例子:here

+0

我不是指多個插入或多個刪除。我的意思是CheckIfNotExists選項。 – ozz

+0

我認爲我的問題與http://redis.io/commands/eval更相關。但我試着用ServiceStack Redis客戶端來尋找解決方案。 – ozz

+0

你使用的是什麼redis客戶端? –