【发布时间】:2016-04-26 20:01:55
【问题描述】:
是否有可用于 Redis 的原子 GET + EXPIRE 命令?这将充当滑动到期值:尝试获取密钥指定的值,然后仅当通过此请求找到密钥时,设置生存时间为 X 秒。
【问题讨论】:
标签: redis
是否有可用于 Redis 的原子 GET + EXPIRE 命令?这将充当滑动到期值:尝试获取密钥指定的值,然后仅当通过此请求找到密钥时,设置生存时间为 X 秒。
【问题讨论】:
标签: redis
不,没有,但是没有什么可以阻止您在 MULTI/EXEC 块中一个接一个地发送这两个命令或使用 Lua 脚本。在不存在的键上使用EXPIRE 没有任何作用。
【讨论】:
或者,我使用简单的 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()
【讨论】: