Я кодирую сервер кеша в Ruby, и мне нужно сделать время истечения для данных, которые я храню. Поэтому, когда пользователь хранит данные под ключом foo
, например, он также устанавливает время истечения в секундах. Данные должны быть удалены в тот момент, так что я думал, что для этого планирования нужно создать поток и спать до тех пор, пока это не произойдет.Правильный способ планирования задачи
Thread.new(@options[:exp_time], key) do |t, k|
exp = Time.now + t
sleep(t)
if @data.key?(k) && @data[k][:exp_time] <= exp #check if it hasn't been updated
@data.delete(k)
end
end
t - это время, когда пользователь отправил и ключ - это ключ, под которым хранятся данные. Время истечения срока действия также может быть изменено, если пользователь заменяет данные, хранящиеся в ключе, поэтому я проверяю его. Мне было интересно, хорошо ли это использовать потоки или потребляет слишком много ресурсов или есть более простой способ. Я не могу использовать драгоценные камни или библиотеки любого типа. Заранее благодарю за любую помощь.
Еще раз спасибо, да, это выглядело неправильно, но это был единственный способ удалить ключи в точное время. Но что на несколько секунд больше, чем при отсутствии сто потоков. –
Это вряд ли будет отставать больше, чем несколько миллисекунд, если вы сделаете это правильно. – tadman