как использовать транзакции в F # используя StackExchange.Redis - PullRequest
1 голос
/ 21 февраля 2020

Я ищу простой пример F #, чтобы сделать что-то вроде этого:

db.StringSet(RedisKey.op_Implicit "a", RedisValue.op_Implicit "1") |> ignore
db.StringSet(RedisKey.op_Implicit "b", RedisValue.op_Implicit "2") |> ignore

но внутри транзакции; Я не могу найти ни одного примера, делающего это.

1 Ответ

3 голосов
/ 21 февраля 2020

Клиент StackExchange.Redis на самом деле не имеет транзакций в традиционном смысле. У него немного другая функция, которую можно использовать для тех же целей. Вы можете прочитать об этом в их документации здесь .

По сути, вы утверждаете предварительное условие, которое должно быть истинным во время выполнения операции для ее завершения. У них есть объект ITransaction, для которого вы устанавливаете условия и пытаетесь выполнить операцию, вместо того, чтобы действовать непосредственно на базу данных:

let key1 = RedisKey.op_Implicit "a"
let key2 = RedisKey.op_Implicit "b"
let value1 = RedisValue.op_Implicit "1"
let value2 = RedisValue.op_Implicit "2"

let transaction = db.CreateTransaction()
transaction.AddCondition(Condition.KeyNotExists(key1))
transaction.AddCondition(Condition.KeyNotExists(key2))

transaction.StringSetAsync(key1, value1) |> ignore
transaction.StringSetAsync(key2, value2) |> ignore

let committed = transaction.Execute()

Затем вы можете проверить, была ли совершена транзакция, чтобы увидеть, были ли ваши ключи вставлен или если откат операции завершен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...