在Golang中使用Redis事务

141 阅读1分钟

在这个例子中,我们将通过利用Client.Watch功能来使用Redis事务。这与数据库事务的原子性原则是一样的--"要么全部发生,要么什么都不发生"。在我们的例子中,如果一个命令失败了,其他的也会失败。

我们有一个银行系统,一个账户持有人可能有多个账户。当我们创建一个账户持有人时,我们也会尝试创建账户。然而,如果在创建过程中出现问题,我们就根本不会创建任何东西。我们将创建3个不同的哈希值。一个用于根元素Holder 。另外两个为Account 元素。

结构

{

应用程序布局

├── docker-compose.yaml

文件

docker-compose.yaml

version: "3"

internal/domain/account/cache.go

package account

internal/domain/account/holder.go

package account

internal/domain/account/account.go

package account

internal/domain/repository/account.go

package repository

internal/storage/account.go

你可以特意删除结构中的MarshalBinaryUnmarshalBinary 方法,使交易失败,以便重现回滚的情况。

package storage

internal/storage/account_test.go

package storage

Redis CLI

localhost:6379> KEYS *