自述文件中给出的示例如下(稍作修改以返回错误)
client.Dedicated(func(c rueidis.DedicatedClient) error {
// watch keys first
c.Do(ctx, c.B().Watch().Key("k1", "k2").Build())
// perform read here
c.Do(ctx, c.B().Mget().Key("k1", "k2").Build())
// perform write with MULTI EXEC
_, err := c.DoMulti(
ctx,
c.B().Multi().Build(),
c.B().Set().Key("k1").Value("1").Build(),
c.B().Set().Key("k2").Value("2").Build(),
c.B().Exec().Build(),
).ToAny()
return err
})
我只有一个
Set()
要执行,但我不清楚我是否必须将我的一个 Set()
作为参数传递给 DoMulti()
才能从 CAS 样式事务中受益,或者这个示例是否只是向我们展示如何(可选) ) 在 CAS 事务中执行多个 Set()
。
我有一个
Set()
要执行,但前提是监视的键不改变。以下内容就足够了吗?如果监视的键值更改或过期,此Set()
会失败并返回适当的错误吗?
client.Dedicated(func(c rueidis.DedicatedClient) error {
// watch keys first
c.Do(ctx, c.B().Watch().Key("k1").Build())
// perform read here
c.Do(ctx, c.B().Get().Key("k1").Build())
// perform single write
_, err := c.Do(ctx, c.B().Set().Key("k1").Value("1").Build()).ToAny()
return err
})
来自 rueidis 项目的
rueian
(https://github.com/redis/rueidis/discussions/494)
如果你依赖WATCH,那么你有两个必须:
在专用连接中使用WATCH。修改a
中监视的键同一连接中的 MULTI EXEC 块。
DoMulti 不是必需的,但通常推荐。
支持
rueian
抽出时间来帮助解决我的n00b问题:)