如何使用 StackExchange.Redis 在 F# 中使用事务
how to use transactions in F# using StackExchange.Redis
我正在寻找一个简单的 F# 示例来执行如下操作:
db.StringSet(RedisKey.op_Implicit "a", RedisValue.op_Implicit "1") |> ignore
db.StringSet(RedisKey.op_Implicit "b", RedisValue.op_Implicit "2") |> ignore
但在交易中;我找不到任何这样做的例子。
StackExchange.Redis 客户端实际上没有传统意义上的 交易 。它有一个稍微不同的功能,可以用于相同的目的。您可以在他们的文档 here.
中阅读相关信息
本质上,您声明了一个前提条件,该前提条件在操作完成时必须为真。他们有一个 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()
然后您可以检查事务是否已提交以查看您的密钥是否已插入或整个操作是否已回滚。
我正在寻找一个简单的 F# 示例来执行如下操作:
db.StringSet(RedisKey.op_Implicit "a", RedisValue.op_Implicit "1") |> ignore
db.StringSet(RedisKey.op_Implicit "b", RedisValue.op_Implicit "2") |> ignore
但在交易中;我找不到任何这样做的例子。
StackExchange.Redis 客户端实际上没有传统意义上的 交易 。它有一个稍微不同的功能,可以用于相同的目的。您可以在他们的文档 here.
中阅读相关信息本质上,您声明了一个前提条件,该前提条件在操作完成时必须为真。他们有一个 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()
然后您可以检查事务是否已提交以查看您的密钥是否已插入或整个操作是否已回滚。