总结:Redis事务就是一次性、顺序性、排他性的执行一个队列中的一系列命令。
UNWATCH:取消WATCH对所有key的监视。
27.0.0.1:6379> multi //开启一个事务 OK 127.0.0.1:6379(TX)> set k1 111 //赋值 QUEUED 127.0.0.1:6379(TX)> set k2 222 //赋值 QUEUED 127.0.0.1:6379(TX)> set k3 333 //赋值 QUEUED 127.0.0.1:6379(TX)> exec // 执行 1) OK 2) OK 3) OK 127.0.0.1:6379> get k2 // 获取对应值 "222"2.2.2 取消事务
127.0.0.1:6379> multi //开启事务 OK 127.0.0.1:6379(TX)> set k4 444 QUEUED 127.0.0.1:6379(TX)> set k5 555 QUEUED 127.0.0.1:6379(TX)> discard // 取消事务 OK 127.0.0.1:6379> exec // 执行就会报错 (error) ERR EXEC without MULTI 127.0.0.1:6379> get k4 (nil)2.2.3 事务监视
127.0.0.1:6379> set k8 8 //先给k8赋值 OK 127.0.0.1:6379> watch k8 //监视k8 OK 127.0.0.1:6379> set k8 888 //修改k8值 OK 127.0.0.1:6379> multi //开启事务 OK 127.0.0.1:6379(TX)> set k8 10000 //修改k8值 QUEUED 127.0.0.1:6379(TX)> set k9 1999 //给k9赋值 QUEUED 127.0.0.1:6379(TX)> exec //执行事务以及结果 (nil) 127.0.0.1:6379> get k8 "888" 127.0.0.1:6379> get k9 (nil)三 基于Go实现Redis事务示例
package main import ( "context" "fmt" "log" "github.com/go-redis/redis/v8" ) func main() { // 创建Redis客户端连接 rdb := redis.NewClient(&redis.Options{ Addr: "localhost:6379", // Redis服务器地址 Password: "", // Redis密码,如果没有设置则留空 DB: 0, // 默认数据库 }) // 堆代码 duidaima.com // 开始事务 tx := rdb.TxPipeline() // 将多个命令添加到事务队列中 tx.Set(context.Background(), "key1", "value1", 0) tx.Set(context.Background(), "key2", "value2", 0) // 执行事务并获取结果 _, err := tx.Exec(context.Background()) if err != nil { log.Fatal(err) } // 关闭Redis客户端连接 err = rdb.Close() if err != nil { log.Fatal(err) } fmt.Println("Transaction executed successfully!") }在上述示例中,我们使用 go-redis/redis 库创建了一个Redis客户端连接,并使用 rdb.TxPipeline() 方法创建了一个事务管道。然后,我们将多个Redis命令(这里是 SET 命令)依次添加到事务管道中。需要注意的是,这些命令并不会立即执行,而是暂存在事务队列中。最后,调用 tx.Exec(context.Background()) 方法来执行整个事务,并获取执行结果。