如何使用stackexchange.redis在f#中使用事务

dauxcl2d  于 2021-06-09  发布在  Redis
关注(0)|答案(1)|浏览(561)

我想找一个简单的例子来做这样的事情:

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

但在交易中;我找不到这样的例子。

hm2xizp9

hm2xizp91#

stackexchange.redis客户端实际上没有传统意义上的事务。它有一个稍微不同的特性,可以用于相同的目的。你可以在他们的文档中看到。
本质上,您声明了一个前提条件,该条件在操作完成时必须为true。他们有一个 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()

然后可以检查事务是否已提交,以查看是否插入了密钥,或者是否已回滚整个操作。

相关问题