1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Redisキャッシュ環境でブロック機能を実装中に発生した無限スクロールの問題

1
Posted at

はじめに

個人開発しているSNSサービスで、ユーザーのブロック機能を実装している際に、Redisキャッシュ・無限スクロール・ユーザーごとのフィルタリングが絡む設計上の問題に直面しました。

最初は「ブロックしたユーザーの投稿を表示しない」というシンプルな機能だと思っていましたが、実際に実装を進めると、ページネーションやキャッシュ戦略にも影響することが分かりました。

この記事では、発生した問題、原因、検討した解決案を整理し、現在どのような方針で実装を進めているかをまとめます。

※この記事の内容は執筆時点ではまだ検証・実装中です。最終的な解決方法については、実装完了後に追記または別記事としてまとめる予定です。

目次

1. 実装の目的

ブロック機能を実装した理由
ブロックした/されたユーザーの投稿を非表示にしたい

2. システム構成

3. 発生した問題

・無限スクロールで投稿数が不足する

4. 原因分析

・投稿取得後にフィルタリングしていたページネーションとの整合性が崩れた

5. 解決案

1) SQLで除外する

1-1) 内容

WHERE NOT IN
NOT EXISTS

1-2) 問題点

・Redisキャッシュとの相性が悪い
・共通キャッシュにユーザー固有データが混ざる可能性

2) Redis取得後にフィルタリング

2-1) 内容

・Redis取得
・フィルタ
・不足したら追加取得

2-2) 懸念点

・ブロック数が多い場合のパフォーマンス
・取得回数が増える可能性

6. 現在の状況

・まだ実装中
・各案を比較検討中

7. 学んだこと

・キャッシュとユーザー固有データは分離して考える必要がある
・ページネーションとフィルタリングの順序は重要
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?