首页 > 解决方案 > 如何使用 StackExchange.Redis 在 F# 中使用事务

问题描述

我正在寻找一个简单的 F# 示例来执行以下操作:

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

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

标签: redisf#transactionsstackexchange.redis

解决方案


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()

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


推荐阅读