5

Redisにいくつかのメタデータ(追加時間、注)とともにIP(多くはありません(<50))を保存する最良の方法を知りたいです。そのリストに IP が含まれているかどうかをすばやく判断し、保存されているすべての IP を取得できるようにする必要があります。

私にはいくつかのアイデアがありますが、それらは私にはエレガント/効率的ではないようです:

  • 各エントリが配列 (ip、メモ、タイムスタンプ) であるリストを使用して IP を保存します。これにより、すべての IP を簡単に取得できますが、特定の IP がリストに含まれているかどうかを判断するには、すべての IP をループする必要があります。したがって、これはすべての IP を取得するには適していますが、1 つの IP の存在を確認するにはあまり適していません。
  • ハッシュ テーブルを使用して IP を保存します。ここで、IP はキーの一部であり、メタ データはハッシュ内のフィールドです。これにより、IP が非常に簡単に (exists()) 保存されているかどうかを確認できますが、保存された IP を追跡するために別の redis リストが必要になります (IP を追加/削除するときは非常に注意する必要があります)。保存されているすべての IP とそのメタ情報を取得するには、1 + count(ips) 操作を実行する必要があります。したがって、この方法は 1 つの IP の存在を確認するには適していますが、すべての IP を取得するには適していません。

redisでこれを行う他の方法はありますか、または上記のアプローチのいずれかを使用する必要がありますか(そうであれば、どれが最適ですか)?

4

2 に答える 2

5

データサイズについては、実際には問題になりません。

しかし、このハックはどうですか。スコアが IP である順序付きセットを使用し (各ピリオドが 00 と見なされる数値として扱います。例: 127.0.0.1 => 1270000001)、各項目がメタデータであり、JSON の IP です。

zadd ip_set 1270000001 '{ip:"127.0.0.1", note:"blah"}

それからあなたがすることすべてを得るために

zrange ip_set 0 -1

そして存在を確認する

zcount ip_set 1270000001
于 2012-04-13T14:17:32.973 に答える
3

もちろん2番目の方法。キー値ストレージです。説明したとおりにキーを使用する必要があります。Redis は操作を非常に迅速に実行します。1〜2回の操作は心配ありません。

于 2012-04-13T13:35:29.453 に答える