2017-06-20 7 views
0

golangとgo-redisパッケージを使用しています 私はキー値ペアを赤字(例えば1回のトークン)で保存したいと思います。このトークンが読み込まれると、永続的なトークンが生成されます。しかし、一度トークンを削除すると、値を読み取ることができます。これは高速リプレイ攻撃を避けるためです。これを実装する最良の方法は何ですか。私はミューテックスを考えていました。golangを使ってredisで一回使用レコードを保存する最良の方法

+1

おそらくredis luaスクリプトを使って1にすることができます:トークンを読み取ってから、途中で2を削除します。もし誰かがあなたの前にそこにいるのを読むことができなければ。 – RickyA

答えて

2

これはMULTI-EXEC機能のための完全なユースケースである:

MULTI 
GET key 
DELETE key 
EXEC 

それとも、外出先で:

pipe := client.TxPipeline() 

get := pipe.Get("key") 
pipe.Del("key") 

_, err := pipe.Exec() 
fmt.Println(incr.Val(), err) 

これは、両方のコマンドがトランザクション内で実行されることを保証しますので、キーのどちらかになります検索され、削除されるか、全く検索されない。

関連する問題