6

それは一般的なタスクのようですが、解決策は見つかりませんでした。

過去 24 時間あたりのユーザーのイベント数 (たとえば、彼が残したコメントの数) を計算する必要があります。古いデータは私にとって興味深いものではないため、1 か月前に追加されたコメントに関する情報は Redis から削除する必要があります。

今、私は1つの解決策しか見ていません。ユーザーの ID と時刻を含むキーを作成し、その値をインクリメントできます。次に、24 個の値を取得し、それらの合計を計算します。各キーには 24 時間の有効期限があります。

例えば、

  1. 6 月 22 日 13:27 のイベント -> キー _22_13 の作成 = 1
  2. 6 月 22 日 13:40 のイベント -> 増分キー _22_13 = 2
  3. 6 月 22 日 18:45 のイベント -> キー _22_18 の作成 = 1
  4. 6 月 23 日 16:00 のイベント -> キー _23_16 の作成 = 1
  5. 6 月 23 日 16:02 にイベントの合計を取得 -> キーの合計 _22_17 - _22_23、_23_00 - _23_16: 私たちのキーでは _22_18 と _23_16 のみで、結果は 2 です。キー _22_13 と _22_13 は期限切れです。

この方法は正確ではなく (24+0..1 時間あたりのイベント数を計算します)、普遍的でもありません (過去 768 分または 2.5 か月あたりのイベント数が必要な場合、どのキーを選択すればよいでしょうか?)。

Redis データ型を使用したより良い解決策はありますか?

4

2 に答える 2

4

あなたのモデルは問題ないようです。もちろん、それは普遍的なものではありませんが、パフォーマンスを向上させるために犠牲にしなければならないものです.

これを続けることをお勧めします。レポートに別の期間 (768 分) が必要な場合は、コメントが保存されている mysql からいつでも取得できます (そうしますよね?)。これは遅くなりますが、少なくともクエリは処理されます。

より速い応答またはより高い精度が必要な場合は、分単位の解像度 (1 分あたり 1 つのカウンター) でカウンターを redis に保存できます。

于 2012-06-22T11:06:50.643 に答える
-1

キーを作成するたびに、redisEXPIREクエリを使用できます。

SET comment "Hello, world"
EXPIRE comment 1000 // in seconds
PEXPIRE comment 1000 // in milliseconds

詳細はこちら

于 2012-06-22T10:54:49.847 に答える