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