使用 DoMulti 的 Rueidis (Redis) 事务

问题描述 投票:0回答:1

自述文件中给出的示例如下(稍作修改以返回错误)

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
})
go redis rueidis
1个回答
0
投票

来自 rueidis 项目的

rueian
(https://github.com/redis/rueidis/discussions/494)

如果你依赖WATCH,那么你有两个必须:

  1. 在专用连接中使用WATCH。修改a

    中监视的键
  2. 同一连接中的 MULTI EXEC 块。

DoMulti 不是必需的,但通常推荐。

支持

rueian
抽出时间来帮助解决我的n00b问题:)

© www.soinside.com 2019 - 2024. All rights reserved.