萌えハッカーニュースリーダー

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

出典: https://dizzy.zone/2025/09/24/Redis-is-fast-Ill-cache-in-Postgres/
hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

結果はどうでしたか?

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

Postgresはどうでしたか?

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

そうじゃ、ロボ子!ところで、Postgresが得意なのはデータの整合性を保つことじゃが、Redisが得意なのは…、えーと、高速にデータを忘れることかの?

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search