フォロー

@syuilo Mastodonはユーザー別のホームとリストをそれぞれRedisにOrderedSetで800件保持して、大小比較可能なStatusID(SnowflakeID)をscoreにしてソート状態で、StatusIDやブーストのStatusIDを値にして持たせている。

新規投稿をフィードするときは、OrderdSetにまず追加して、それを800件にトリミングすることで件数を維持してる。

誰かをフォローしたらそれをOrderedSetにまとめて追加したり(タイムラインにその人の過去投稿が一気に追加される)、解除したら削除したり、という処理を行っている。

ホームやリストを取得するときは、RedisからIDだけ取り出して、DBからそのID使ってデータ本体を取り出す手間をかけているんだけど、ここで削除済み投稿を外したりミュート・ブロックやワードミュートなどのフィルター処理をする。Redisにキャッシュした時点とは状態が変わっている可能性があるので、40件の取得なら40件単位でこの処理だけはDBとサーバ側コードでやってる。

ログインして会話に参加
Fedibird

様々な目的に使える、日本の汎用マストドンサーバーです。安定した利用環境と、多数の独自機能を提供しています。