用戶具有DisplayName,並且它對用戶是唯一的。在ServiceStack Redis客戶端中使用驗證創建事務
我要創建用戶,但首先我要檢查顯示名稱(顯示名稱無法複製的用戶)
我檢查ServiceStack例子,我看不出與驗證檢查事務插入/更新。
我該如何執行它。我不想爲redis db編寫「驗證任務」。 我不想在數據庫中出現不一致。
用戶具有DisplayName,並且它對用戶是唯一的。在ServiceStack Redis客戶端中使用驗證創建事務
我要創建用戶,但首先我要檢查顯示名稱(顯示名稱無法複製的用戶)
我檢查ServiceStack例子,我看不出與驗證檢查事務插入/更新。
我該如何執行它。我不想爲redis db編寫「驗證任務」。 我不想在數據庫中出現不一致。
的ServiceStack.Redis客戶確實有Redis的的WATCH和transactions當這些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();
}
需求正在檢查交易中的密鑰,但在交易之前完成。作爲示例https://github.com/ServiceStack/ServiceStack/blob/master/src/ServiceStack.ServiceInterface/Auth/RedisAuthRepository.cs。 AssertNoExistingUser和Store操作在CreateUserAuth方法中必須是事務性的。 – ozz
RedisAuthRepository可以存儲兩個具有相同顯示名稱的新用戶。 – ozz
閱讀Redis Transactions(http://redis.io/topics/transactions),WATCH會影響下一個後續事務。即如果在WATCH命令和事務之間修改了任何**觀看的鍵**,則事務不會被執行並拋出異常。 – mythz