2016-04-26 5 views
1

Есть ли у Redis сообщение с атомом GET + EXPIRE? Это будет действовать как скользящее значение срока действия: попытайтесь получить значение, указанное ключом, а затем , только если ключ был найден с этим запросом, установите время для жизни в течение X секунд.Redis atomic GET и EXPIRE

ответ

3

Нет, нет, но нет ничего, что мешает вам отправлять две команды один за другим в блоке MULTI/EXEC или с использованием сценария Lua. Использование EXPIRE для несуществующего ключа ничего не делает.

0

Или я использую простой 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() 
Смежные вопросы