2016-11-30 81 views
3

我试图使用如何设置在ROR中使用redis客户端的过期时间?

redis.mapped_mset({ "f1" => "v1", "f2" => "v2" }) 

多个按键设置成Redis,我不能设置在同一时间到期时间。 只有这样,才能设置过期时间来使用:

set(key, value, options = {}) 

expire(key, seconds) 

我要叫很多次,这不是我想看到的。 还有其他方法可以解决这个问题吗?

回答

3

redis本身does not support带过期参数的多项设置。 Redis#mapped_set是一个称为msetmset的语法糖,它本身是一个句法糖,用于事后调用后续set多次。

因此,您唯一需要的是将后续调用set(... ex:...)包含到与Redis#multi的交易中。

+0

感谢您的回答! – neo

+0

但我不在乎这些设置操作是否在同一事务中,这是否意味着我可以单独调用它们而不使用Redis#multi? – neo

+0

你已经要求一个等效的'mapped_mset'到期。 'mapped_mset'是一个交易的原子操作。如果你不想让它成为原子,可以不用'multi'来调用它。 – mudasobwa

0

您可以编写包装器方法来设置列表并添加到期。使用redis.multi将其包装到传输模块中。

def set_list(list, expire_in = 10) 
    redis.multi do 
    list.each{ |k, v| redis.set(k,v, ex: expire_in)} 
    end 
end 
相关问题