2011-11-10 8 views
1

this questionの回答に基づいて、自分のサイトにRedisを使用して通知ストリームを構築することができました。 Webクライアント上のすべての「アクション」は、関心のあるすべてのユーザー(フォロワー、コメント投稿者など)に対して「記録」されます。保留中の通知は、毎回ポーリングを使用して秒単位で取り出されます。初期要件にRedisベースの通知システムの問題

が、私は彼らがフェッチされた後、私のサーバーインフラストラクチャが通知を削除作られた、私はより多くを開いたときに、問題を正確に来る

を(速いRedisのを維持し、低メモリ消費量を有することが重要です) 1つのマシン上に1つのクライアント。後でredisからポップされるため、最初の通知のみが通知を表示します。

私はいくつかのソリューションについて考えましたが、これまでの唯一の合理的なものは次のとおりです。通知を削除する代わりに、数時間で有効期限が切れるように設定しました。もちろん、これは、私がクライアントベースのidやsthを思い出さない限り、同じ通知を何度も何度も送信しているサーバーの問題を解決するのに役立ちません(削除されないため)。 。

簡単な代替手段はありますか?

+0

なぜですかパブリッシュ/サブスクライブを使用していますか? (http://redis.io/topics/pubsub)ポーリングを行う必要がある理由はありますか? –

答えて

1

私は最も簡単な解決策は、通知が追加されるたびに各ユーザーのカウンタを維持し、それを通知して通知することだと思います。

各Webクライアントは、すでに持っている通知のシーケンスID番号を保持できます。したがって、各投票では、変更されているシーケンスIDに基づいて新しい通知があるかどうかを確認するだけです。また、期限切れキーを使用する代わりに、順序付きセットとストア通知をセット内で使用することができます。シーケンスIDに基づいて必要なすべての通知を取得し、設定された時刻からアイテムをパージするだけです。