1

だから私は Key -> Struct からのマップを持っています

私のキーはデバイスの IP アドレスになり、Value(Struct) はデバイスの IP アドレスを保持し、その時間が経過するとキーと値のペアが期限切れになり、マップから削除されます。

私はこれにかなり慣れていないので、どうすれば良いのか疑問に思っていました。

私はグーグルで検索しましたが、Javaのみの時間ベースのマップで多くのことを見つけたようです

編集

これに遭遇した後、アイテムを含むマップを作成し、各要素への参照と並行して両端キューを作成する必要があると思います。次に、定期的に clean を呼び出し、x 時間より長くそこにある場合は削除します。

この修正者は誰でもそれを行うためのより最適な方法を提案できますか?

4

1 に答える 1

1

このような問題を解決するために、3 つのアプローチを使用しました。

  1. 定期タイマーを使用します。毎回クォンタムで、期限切れのすべての要素を取得し、それらを期限切れにします。要素をタイマー ホイールに保持します。アイデアについては、このペーパーのスキーム 7 を参照してください。ここでのオーバーヘッドは、何もすることがなく、バケットに一定のメモリ オーバーヘッドがあるときに定期的なタイマーが作動することです。そこからの要素。

  2. 最短の有効期限については、すべての要素を確認してください。その時間の後に開始するようにタイマーをスケジュールします。タイマーで、期限切れの要素を削除し、次のタイマーをスケジュールします。有効期限が現在スケジュールされているタイマーよりも短い場合、新しい要素が追加されるたびにタイマーを再スケジュールします。誰が最初に失効する必要があるかをすばやく検索できるように、要素をヒープに保持します。これには、挿入と削除のオーバーヘッドが非常に大きくなりますが、マップからの最も一般的な削除が期限切れによるものである場合は、かなり効率的です。

  3. マップにアクセスするたびに、アクセスしている要素の有効期限が切れていないか確認してください。もしそうなら、それを捨てて、そもそもそこになかったふりをしてください. これは、アクセスごとにタイムスタンプをチェックするための呼び出しがすべて行われるため、非常に非効率的である可能性があり、有効期限が切れたときに何らかのアクションを実行する必要がある場合は機能しません。

于 2013-07-22T09:22:45.993 に答える