4

SpringとJSF2.0に基づいたアプリケーションを開発しています。特定のIPアドレスのクライアントが過去3分間にフォームを送信しようとした回数を覚えておく必要があります。3分間に3回を超える送信試行が記録された場合は、キャプチャが表示されます。

ConcurrentMap<String, ConcurrentLinkedQueue<Long>>IPアドレス(String)と送信時間(milis)をキュー( )に保存するために使用することを考えていますConcurrentLinkedQueue<Long>。キューはQuartzによって3分間隔でクリーンアップされます(3分より古いミリスは削除されます)。キャプチャを表示するかどうかを確認するには、キューサイズが3より大きいかどうかを確認します。

これは正しいアプローチですか?もっと良いアイデアはありますか?

4

2 に答える 2

7

Java は、IP アドレスを格納するための特別なクラスを提供します: java.net.InetAddress. とは異なりLong、32 ビットのアドレスに加えて 128 ビットのアドレスを処理することができ、String使用するメモリの点で ほど無駄がありません。これは、非常に大量の状況で重要になる可能性があります。

于 2012-07-27T14:29:08.413 に答える
2

個人的には、IP を String ではなく Long として保存しています。

パフォーマンスの向上が見られます。

于 2012-07-27T14:25:43.450 に答える