Максимальная арность рубиновой функции?

Я хочу сделать эффективную функцию для очистки кэша на основе 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 метод, ни какой-либо рубиновый метод, я не могу найти его в Интернете.

Какова максимальная арность?

1 ответ

Решение

У @muistooshort в комментариях было хорошее предложение, которое оказалось правильным, драйвер redis знает, что делать с аргументом массива:

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

Просто передайте массив ключей $redis.del

Другие вопросы по тегам