go - Golang 中的原子和并发安全 Redis 事务

标签 go concurrency redis transactions

我正在尝试在我的 go 程序中实现以下逻辑:

def action:
 1. GET the value of KEY from Redis
 2. SET the value of KEY to 0

我正在使用 go-redis与我的 Redis 实例交互的模块。

我熟悉 Redis 事务,但我似乎找不到合适的文档或示例来说明如何在 Golang 中以并发安全和原子的方式实现所需的操作集。

问题:如何实现定义的action并确保在步骤 1 和 2 之间不会发生其他 Redis 操作,即使我从不同的位置访问我的 Redis 实例也是如此去例行公事?

最佳答案

您可以使用单个 Redis 命令 GETSET 来完成此操作,这将是原子的:

GETSET KEY 0

更广泛地说,在确保 Redis 中的原子性方面没有任何特定于 Go 的内容。您只需使用您熟悉的相同 Redis 事务设施(通过 Go Redis 客户端)。

关于go - Golang 中的原子和并发安全 Redis 事务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55102652/

相关文章:

sorting - 使用 SORT 命令从 Redis 中的排序集中获取 HASH 字段

unit-testing - 如何获得文件夹的全局测试覆盖率

go - 序列化 goroutines(并行化但保证顺序)

tree - 使用go语言提取目录层次结构

go - 如何通过 HTTPS 提供静态文件

java - 使用两个线程写入/读取 Vector(或 ArrayList)

database - 这个的可序列化图是什么?

ruby - 在 Ruby 中检索 Redis 列表值的最佳方法?

c++ - 用于单个生产者单个消费者 FIFO 的 STL 容器?

ruby-on-rails - Redis 查找 set 包含元素的键