Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用golang在redis中存储一次性使用记录的最佳方法_Go_Redis - Fatal编程技术网

使用golang在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(&

我正在使用golang和go redis软件包
我想在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。删除令牌。如果你看不懂,别人会比你先到的。