使用golang在redis中存储一次性使用记录的最佳方法
我正在使用golang和go redis软件包使用golang在redis中存储一次性使用记录的最佳方法,go,redis,Go,Redis,我正在使用golang和go redis软件包 我想在redis中存储一个键值对(例如一次性令牌)。当读取此令牌时,我生成一个永久令牌。但一旦我读取了值,一次性令牌就应该被删除。这是为了避免快速重放攻击。实现这一点的最佳方式是什么。我一直在考虑互斥体。这是多执行功能的完美用例: MULTI GET key DELETE key EXEC 或在围棋中: pipe := client.TxPipeline() get := pipe.Get("key") pipe.Del(&
我想在redis中存储一个键值对(例如一次性令牌)。当读取此令牌时,我生成一个永久令牌。但一旦我读取了值,一次性令牌就应该被删除。这是为了避免快速重放攻击。实现这一点的最佳方式是什么。我一直在考虑互斥体。这是
多执行功能的完美用例:
MULTI
GET key
DELETE key
EXEC
或在围棋中:
pipe := client.TxPipeline()
get := pipe.Get("key")
pipe.Del("key")
_, err := pipe.Exec()
fmt.Println(get.Val(), err)
这将确保两个命令都在事务中执行,因此将检索和删除密钥,或者根本不检索密钥。这是多执行功能的完美用例:
MULTI
GET key
DELETE key
EXEC
或在围棋中:
pipe := client.TxPipeline()
get := pipe.Get("key")
pipe.Del("key")
_, err := pipe.Exec()
fmt.Println(get.Val(), err)
这将确保两个命令都在事务中执行,因此密钥要么被检索并删除,要么根本不被检索。您可以使用redis lua脚本1:读取令牌,然后中间读取2。删除令牌。如果你不能阅读别人在你之前到达的标记,你可以使用redis lua脚本1:读取标记,然后中间读取2。删除令牌。如果你看不懂,别人会比你先到的。