【问题标题】:Redis atomic GET and EXPIRERedis 原子 GET 和 EXPIRE
【发布时间】:2016-04-26 20:01:55
【问题描述】:

是否有可用于 Redis 的原子 GET + EXPIRE 命令?这将充当滑动到期值:尝试获取密钥指定的值,然后仅当通过此请求找到密钥时,设置生存时间为 X 秒。

【问题讨论】:

    标签: redis


    【解决方案1】:

    不,没有,但是没有什么可以阻止您在 MULTI/EXEC 块中一个接一个地发送这两个命令或使用 Lua 脚本。在不存在的键上使用EXPIRE 没有任何作用。

    【讨论】:

      【解决方案2】:

      或者,我使用简单的 Lua 脚本:

      local val, err = redis.pcall('GET', KEYS[1])
      if err then
          return err
      end
      redis.call('EXPIRE', KEYS[1], ARGV[1])
      return {val}
      

      在 Golang 中你可以这样做:

      import "github.com/go-redis/redis"
      
      const lua = `
      local val, err = redis.pcall('GET', KEYS[1])
      if err then
          return err
      end
      redis.call('EXPIRE', KEYS[1], ARGV[1])
      return {val}
          `
      
      redisGetEx = redis.NewScript(lua)
      result, err = redisGetEx.Run(redisClient, []string{"key"}, 1800).Result()
      

      【讨论】:

        猜你喜欢
        • 2021-11-03
        • 2018-09-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-06-29
        • 2014-01-10
        • 1970-01-01
        相关资源
        最近更新 更多