redis - 如何使用 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
但在交易中;我找不到任何这样做的例子。
解决方案
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()
然后,您可以检查事务是否已提交,以查看您的密钥是否已插入或整个操作是否回滚。
推荐阅读
- jasmine - Matcher 未检测到差异。错误?
- oracle - Oracle 外部表和 CSV KUP-04035
- python - Django 新手 - 显示细节对象
- ruby-on-rails - Ruby on Rails 应用程序本地目录用于资源分配
- php - 使用 laravel eloquent 创建数据库记录时出现查询异常
- microsoft-teams - 关于 microsoft graph Api 集成
- python - 在两个日期之间过滤,但使用相反的逻辑
- r - 将图像添加到 PDF R 降价
- istio - 在生产环境中使用 Istio Ingress - 每秒处理 10,000 个 Rest api 调用 2KB 有效负载大小
- python - VS Code 导入错误无法导入名称,不重启如何解决?