Redis ソート セットを使用するアクティビティ フィード システムがあります。
イベントが発生し、メッセージが関連するユーザーごとに並べ替えられたセットに配置され、スコアのタイムスタンプが付けられます。
メッセージは、ユーザーがログインするとき、またはユーザーが現在ログインしている場合はプッシュを介して、ユーザーに配信されます。
ユーザーが「読んだ」メッセージとまだ読んでいないメッセージを区別したいと思います。
私の理解では、「既読/未読」プロパティをメンバーの一部として持つことはできません。これを変更すると、現在のメンバーを置き換えるのではなく、メンバーが異なるため、もう一度追加されるためです。
したがって、私が考えているのは、ユーザーごとにセットをソートする必要があるということです。「未読」セットと「既読」セットです。
- 新しい予定が入ると、「未読」セットに追加されます
- ユーザーがメッセージを読んだら、そのメッセージを既読セットに追加し、未読セットから削除します。
それらを配信する方法について少し確信が持てません。たとえば、未読のスコアを逆にしない限り、既読と未読の区別が失われるため、それらを結合することはできません。
2 つのセットを個別に返す (そしてコードでマージする) と、ページングが難しくなります。既読/未読に関係なく、最新の 20 件のメッセージを表示できるようにしたいと考えています。
だから、質問:
- 読み取りセット/未読み取りセットの方法は、それを行うための最良の方法ですか? より良い方法はありますか?
- マージ/ユニオンされたデータのサブセットを返す最良の方法は何ですか?
ありがとう!