私は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