Я хотел бы сделать базовые часы с помощью StackExchange.Redis. Если в ходе транзакции изменяется ключ, он терпит неудачу.Как сделать основной чат с помощью StackExchange.Redis
StackExchange.Redis очень хорошо отнесся к «Условие» api, которое поддерживает концепции «Равно» и «Существует».
Это действительно хорошо, но я хотел бы просто сделать что-то вроде «Без изменений». Я мог бы что-то упустить, но для меня сейчас не очевидно, как это сделать.
Можно ли сделать что-то вроде:
var transaction = redis.CreateTransaction();
transaction.AddCondition(Condition.StringUnchanged("key")); //the API here could maybe be simplified
var val = transaction.StringGet("key"); //notably, this is not async because you would have to get the result immediately - it would only work on watched keys
transaction.StringSetAsync("key", val + 1);
transaction.Execute();
или даже возможно лучший вариант (который будет делать то же самое):
var transaction = redis.CreateTransaction();
var val = transaction.Watch("key"); //this would return the value!
transaction.StringSetAsync("key", val + 1);
transaction.Execute();
В настоящее время единственным способом я понимаю делать это было бы сделать что-то в соответствии с:
Какой из попыток чтения код SE.Redis Я понимаю, перевести что-то вроде (не уверен, насколько точны это):
val = GET key
WATCH key
MULTI
val = val + 1
SET key $val
checkVal = GET key
(then if checkVal != val:) UNWATCH
(otherwise:) EXEC
Я все еще учусь больше о Redis, но я не совсем уверен, что польза от этого , Бы не вы, а конечный результат будет что-то больше, как это ?:
WATCH key
MULTI
val = GET key
val = val + 1
SET key $val
EXEC
Или это не возможно с тем, как SE.Redis работает?
Я отредактирую свой ответ, чтобы отразить ваше редактирование –