最大的红宝石功能?

时间:2013-08-15 18:50:08

标签: ruby function arity

我希望能够有效地清除基于redis的缓存。

我有一个方法调用,它从redis返回一些键:

$redis.keys("foo:*")

返回以“foo:”开头的所有键。接下来,我想删除这些键的所有值。

一种(内存密集型)方法是:

$redis.keys("foo:*").each do |key|
  $redis.del(key)
end

我想避免将所有密钥加载到内存中,然后向redis服务器发出大量请求。

我喜欢的另一种方法是使用splat运算符:

keys = $redis.keys("foo:*")
$redis.del(*keys)

问题在于我不知道$redis.del方法的最大优点是什么,也不知道任何ruby方法,我似乎无法在线找到它。

什么是最大的arity?

1 个答案:

答案 0 :(得分:0)

评论中的@muistooshort提出了一个很好的建议,结果证明是正确的,redis驱动程序知道如何处理数组参数:

 # there are 1,000,000 keys of the form "foo:#{number}"
 keys = $redis.keys("foo:*")
 $redis.del(keys) # => 1000000

只需将一组键传递给$redis.del