2025/09/25 23:34 Redis is fast – I'll cache in Postgres

やあ、ロボ子。今日はPostgresをRedisの代わりにキャッシュとして使う実験について話すのじゃ。

興味深いテーマですね、博士。Postgresをキャッシュとして使うというのは、どのような背景があるのでしょうか?

ふむ、プロジェクトによっては、Postgresだけで十分スケールする場合があるからの。別の依存関係を増やすメリットが少ない場合もあるのじゃ。

なるほど。実験環境はどのようなものだったのでしょう?

Kubernetesクラスタを使って、PostgresとRedisはそれぞれ2CPU、8GiBメモリに制限したのじゃ。バージョンはそれぞれ`postgres:17.6`と`redis:8.2`じゃ。

データはどのように準備されたのですか?

RedisとPostgresにそれぞれ3000万件のエントリをシードしたのじゃ。ベンチマークには既存のUUIDのサブセットを使ったぞ。

ベンチマークの内容について詳しく教えてください。

Get、Set、Mixed(Read/Write)の3種類のワークロードを実行したのじゃ。Setベンチマークは10%の確率で既存のキーを更新、Getベンチマークは80%の確率で既存のキーを選択するようにしたぞ。

結果はどうでしたか?

Get、Set、Read/Writeのすべてのワークロードで、Redisの方がPostgresよりもパフォーマンスが高かったのじゃ。

やはりそうでしたか。PostgresのUnloggedテーブルについてはどうでしたか?

Unloggedテーブルは、Writeベンチマークで大きな差が見られ、Mixedワークロードでも有意な差が見られたのじゃ。Readパフォーマンスにはほとんど差がないみたいじゃ。

なるほど。Redisのパフォーマンス指標についてもう少し詳しく教えていただけますか?

RedisのGetではHTTPサーバー側のCPUがボトルネックで、約1280mCPU、約3800MiBのRAMを使用したのじゃ。SetではRAM使用量が約4300MiBまで増加したぞ。

Postgresはどうでしたか?

PostgresはGetとSetの両方でCPUがボトルネックで、2コアをフルに使用したのじゃ。メモリ使用量はGetで約5000MiB、Setで約5500MiBまで増加したぞ。

Read/Writeの混合ワークロードではどうでしたか?

RedisはCPUが約1280mCPUで安定し、RAM使用量が増加したのじゃ。Postgresは2コアをフルに使用し、メモリ使用量は約6GiBだったぞ。

PostgresのReadパフォーマンスはどれくらいでしたか?

Postgres Readは7425 requests per secondだったのじゃ。

今回の実験から、どのようなことが言えますか?

キャッシュとしてRedisの方がPostgresよりも高速じゃ。RedisにはTTLなどの便利な機能も付属しているしな。でも、プロジェクトによってはPostgresで十分なスケールの場合もあるからの。キャッシュのインターフェースを持つことで、必要に応じて簡単にストアを切り替えられるのは良いことじゃ。

確かにそうですね。状況に応じて使い分けるのが賢明ですね。

そうじゃ、ロボ子!ところで、Postgresが得意なのはデータの整合性を保つことじゃが、Redisが得意なのは…、えーと、高速にデータを忘れることかの?
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。
