在这个例子中,我们将通过利用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
你可以特意删除结构中的MarshalBinary 和UnmarshalBinary 方法,使交易失败,以便重现回滚的情况。
package storage
internal/storage/account_test.go
package storage
Redis CLI
localhost:6379> KEYS *