2016-11-18 136 views
0

我正在使用golang作爲我的後端。我在redis中存儲了一些標記值。我將值設置爲HSET並獲取HGETALL.I中的值想知道是否有任何函數可以設置即時存儲在redis數據庫中的密鑰的有效期。我希望令牌及其數據在1小時後被刪除。我使用Redigo軟件包進行redis。謝謝。讚賞任何幫助。如何在golang中設置redis鍵的過期

I use this to set the struct with has token as key  
redisCon.Do("HMSET", redis.Args{}.Add(hashToken).AddFlat(&dataStruct)...) 
+0

你應該告訴別人你用什麼Redis的庫。也可以在「godoc.com」中搜索如何使用它 – Laily

+0

我在我的客戶端使用redigo庫來連接redigo服務器..我使用像這樣的c.Do(「HMSET」,ciphertext,3200, datastruct)。這裏的cipertext是關鍵,3200是ttl,datastruct是包含token的細節結構。但是檢查ttl的那個鍵它顯示-1 ...感謝任何幫助。謝謝 –

回答

1

Redis documentation不支持像「HMSETEX」這樣的命令。 「HMSET」修改散列鍵而不是根鍵。 TTL在根密鑰級支持,而不在散列密鑰級。因此,在你的情況下,你必須在另一個電話中這樣做:

redisCon.Do("EXPIRE", key, ttl) 

你使用哪個客戶端連接到redis?

對於redigo您可以使用此 - https://github.com/yadvendar/redigo-wrapper 在使用呼叫

func Expire(RConn *redigo.Conn, key string, ttl int) 

對於goredis - https://godoc.org/gopkg.in/redis.v5#Client.TTL 在這種使用:

func (c *Client) TTL(key string) *DurationCmd 
+0

謝謝。到期時間是僅當我單獨設置時才設置。但是,當我結合在兩個hset和當我檢查ttl使用的密鑰它顯示-1.May我知道這裏出了什麼問題。我用這樣的c.Do(「HMSET」,密文,3200,datastruct).For你的信息datastruct是有一些字段的令牌結構。謝謝感謝任何幫助... –

+0

如果它爲你工作,兩個電話分開設置它可能是最好的。如果您不承諾使用您使用的軟件包,可能需要查看此軟件包https://github.com/keimoon/gore/wiki/Pipeline。使用管道工具,您可以設置呼叫和一起運行它們。所以設置然後到期。 – reticentroot

+0

您只需要單獨設置它。根據Redis的官方文檔,它支持「SETEX」http://redis.io/commands/setex - 將字符串數據設置爲給定鍵的值和過期。它不支持任何「HMSETEX」命令,所以我認爲你只需要單獨調用它。 – Yadvendar