【问题标题】:how to set the expiry of the redis keys in golang如何在golang中设置redis键的到期时间
【发布时间】:2020-05-05 00:17:38
【问题描述】:

我使用 golang 作为我的后端。我在 redis 中存储了一些令牌值。我正在设置值 HSET 并在 HGETALL 中获取值。我想知道是否有任何函数可以设置键的到期时间我存储在 redis 数据库中。我希望在 1 小时后删除令牌及其数据。我正在为 redis 使用 Redigo 包。谢谢。感谢您的帮助。

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

【问题讨论】:

  • 你应该告诉别人你使用什么redis库。您也可以在“godoc.com”中搜索如何使用它
  • 我在客户端使用 redigo 库与 redigo 服务器连接..我像这样使用 c.Do("HMSET", ciphertext, 3200, datastruct)。这里 cipertext 是关键, 3200 是 ttl,datastruct 是包含令牌详细信息的结构。但是检查 ttl 的那个键它显示 -1...感谢任何帮助。谢谢

标签: go redis


【解决方案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

【讨论】:

  • 谢谢。只有我单独设置时才设置到期时间。但是当我在hset中结合使用它显示-1的密钥检查ttl时。我知道这里出了什么问题。我使用了类似c.Do(“HMSET”,密文,3200,datastruct)的东西。对于您的信息数据结构是其中包含一些字段的令牌结构。感谢您的帮助...
  • 如果对您有用,最好将其分别设置为两个调用。如果您没有致力于您正在使用的包,那么查看这个包github.com/keimoon/gore/wiki/Pipeline. 可能值得。使用管道工具,您可以设置调用并串联运行它们。所以设置然后过期。
  • 只需要单独设置即可。根据 Redis 的官方文档,它支持“SETEX”redis.io/commands/setex - 将字符串数据设置为值并过期到给定的键。它不支持任何“HMSETEX”命令,所以我认为你只需要单独调用它。
【解决方案2】:

使用go-redis库的可以通过调用设置过期时间

_, err = redisClient.Expire("my:redis:key", 1 * time.Hour).Result()

或者,您可以在插入时执行此操作

_, err = redisClient.Set("my:redis:key", "value", 1 * time.Hour).Result()

【讨论】:

  • 它说无效时间到期
  • @chovy 你用的是哪个redis版本?这是您得到“无效时间到期”的确切错误吗?您尝试设置的秒数是多少?
  • 我没有使用time.Hour 我想这是必需的。我刚刚通过86400,我想那也是纳秒,所以它马上就要过期了。
猜你喜欢
  • 2019-05-24
  • 2016-05-15
  • 1970-01-01
  • 2020-06-18
  • 2018-12-06
  • 2020-05-12
  • 2013-10-02
  • 2023-04-02
  • 2018-01-17
相关资源
最近更新 更多