2016-11-18 652 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