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

时间:2016-11-30 09:42:58

标签: ruby-on-rails ruby redis

我正在尝试使用

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

将多个密钥设置为Redis,我无法同时设置过期时间。 设置过期时间的唯一方法是使用它:

set(key, value, options = {})

expire(key, seconds)

我必须多次打电话,这不是我想看到的。 还有其他方法可以解决这个问题吗?

2 个答案:

答案 0 :(得分:4)

Redis本身does not support多个设置,带有过期参数。 Redis#mapped_set是一种用于调用mset的语法糖,而mset本身是一种语法糖,可以多次在事务上调用后续set

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

答案 1 :(得分:1)

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

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