4

Redis ソート セットを使用するアクティビティ フィード システムがあります。

イベントが発生し、メッセージが関連するユーザーごとに並べ替えられたセットに配置され、スコアのタイムスタンプが付けられます。

メッセージは、ユーザーがログインするとき、またはユーザーが現在ログインしている場合はプッシュを介して、ユーザーに配信されます。

ユーザーが「読んだ」メッセージとまだ読んでいないメッセージを区別したいと思います。

私の理解では、「既読/未読」プロパティをメンバーの一部として持つことはできません。これを変更すると、現在のメンバーを置き換えるのではなく、メンバーが異なるため、もう一度追加されるためです。

したがって、私が考えているのは、ユーザーごとにセットをソートする必要があるということです。「未読」セットと「既読」セットです。

  • 新しい予定が入ると、「未読」セットに追加されます
  • ユーザーがメッセージを読んだら、そのメッセージを既読セットに追加し、未読セットから削除します。

それらを配信する方法について少し確信が持てません。たとえば、未読のスコアを逆にしない限り、既読と未読の区別が失われるため、それらを結合することはできません。

2 つのセットを個別に返す (そしてコードでマージする) と、ページングが難しくなります。既読/未読に関係なく、最新の 20 件のメッセージを表示できるようにしたいと考えています。

だから、質問:

  1. 読み取りセット/未読み取りセットの方法は、それを行うための最良の方法ですか? より良い方法はありますか?
  2. マージ/ユニオンされたデータのサブセットを返す最良の方法は何ですか?

ありがとう!

4

1 に答える 1

4

メンバーを更新しようとする代わりに、メンバーをポップして新しいバージョンを挿入することができます。メンバーとそのタイムスタンプの両方を知っているので、問題はないはずです。

于 2012-11-27T19:00:18.060 に答える