我试图使用如何设置在ROR中使用redis客户端的过期时间?
redis.mapped_mset({ "f1" => "v1", "f2" => "v2" })
多个按键设置成Redis
,我不能设置在同一时间到期时间。 只有这样,才能设置过期时间来使用:
set(key, value, options = {})
或
expire(key, seconds)
我要叫很多次,这不是我想看到的。 还有其他方法可以解决这个问题吗?
我试图使用如何设置在ROR中使用redis客户端的过期时间?
redis.mapped_mset({ "f1" => "v1", "f2" => "v2" })
多个按键设置成Redis
,我不能设置在同一时间到期时间。 只有这样,才能设置过期时间来使用:
set(key, value, options = {})
或
expire(key, seconds)
我要叫很多次,这不是我想看到的。 还有其他方法可以解决这个问题吗?
redis本身does not support带过期参数的多项设置。 Redis#mapped_set
是一个称为mset
和mset
的语法糖,它本身是一个句法糖,用于事后调用后续set
多次。
因此,您唯一需要的是将后续调用set(... ex:...)
包含到与Redis#multi
的交易中。
您可以编写包装器方法来设置列表并添加到期。使用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
感谢您的回答! – neo
但我不在乎这些设置操作是否在同一事务中,这是否意味着我可以单独调用它们而不使用Redis#multi? – neo
你已经要求一个等效的'mapped_mset'到期。 'mapped_mset'是一个交易的原子操作。如果你不想让它成为原子,可以不用'multi'来调用它。 – mudasobwa