# Discourse は Redis を何に使用していますか？

**URL:** https://meta.discourse.org/t/what-does-discourse-use-redis-for/155042
**Category:** Development
**Created:** [2020 年 6 月 16 日午後 7:11 UTC](https://meta.discourse.org/t/what-does-discourse-use-redis-for/155042 "2020-06-16T19:11:22Z")
**Posts on this page:** 6
**Page:** 1

<div class="post-metadata">

### Author: ![Francis](https://avatars.discourse-cdn.com/v4/letter/f/ac8455/32.png) [@Francis](https://meta.discourse.org/u/Francis)
#### Post date: [2020 年 6 月 16 日午後 7:11 UTC](https://meta.discourse.org/t/what-does-discourse-use-redis-for/155042/1 "2020-06-16T19:11:22Z")

</div>

現在、私の Discourse インストールでは、DigitalOcean のマネージド PostgreSQL データベースと、DigitalOcean のマネージド Redis インスタンスを使用しています。マネージド Redis サーバーは必要でしょうか？

Discourse は永続的なデータを Redis に格納するのでしょうか、それともキャッシングやその他の一時的なデータのためだけに使用されるのでしょうか？

現在の設定（明らかにオーバースペックですが、将来的に必要になった場合に拡張が容易になります）:

- DigitalOcean のマネージド PostgreSQL サーバー
- DigitalOcean のマネージド Redis インスタンス
- DigitalOcean のロードバランサー
- Discourse を実行している 2 台の DigitalOcean ドロップレット

私が考えているよりシンプルな構成は以下の通りです:

- DigitalOcean のマネージド PostgreSQL サーバー
- Redis と Discourse アプリケーションの両方を実行する単一のサーバー（必要に応じてフェイルオーバー用のバックアップサーバーへ移行するためのフローティング IP を備える）

現在の構成では、外部の Redis サーバーのおかげで、ユーザーに気づかれずに Web サーバーをシームレスに切り替えることができます。よりシンプルな構成の場合、フェイルオーバーサーバーが必要になった際にユーザーがログアウトされてしまう可能性があります。Redis を Discourse と同じサーバー上で実行することの主な欠点はこれでしょうか？

よろしくお願いいたします、  
Francis

---

<div class="post-metadata">

### Author: ![Tuhadj](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/tuhadj/32/166173_2.png) [@Tuhadj](https://meta.discourse.org/u/Tuhadj)
#### Post date: [2020 年 12 月 1 日午前 9:57 UTC](https://meta.discourse.org/t/what-does-discourse-use-redis-for/155042/2 "2020-12-01T09:57:49Z")

</div>

+1 私も同じ質問があります。Redis と Discourse について、もう少し詳しく説明していただけないでしょうか 😙

---

<div class="post-metadata">

### Author: ![neounix](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/neounix/32/215617_2.png) [@neounix](https://meta.discourse.org/u/neounix)
#### Post date: [2020 年 12 月 1 日午後 12:28 UTC](https://meta.discourse.org/t/what-does-discourse-use-redis-for/155042/3 "2020-12-01T12:28:15Z")

</div>

> [@Tuhadj](#):
>
> Redis と Discourse

Discourse は、オープンソースの [ジョブスケジューラ](https://en.wikipedia.org/wiki/Job_scheduler) である Sidekiq を使用しています。Sidekiq は [Ruby](https://en.wikipedia.org/wiki/Ruby_(programming_language)) で書かれています。Sidekiq は一般的に（デフォルトでは）ジョブの実行のみを行い、スケジューリングは行わないとされています（少なくとも参考文献にはそう記載されています。状況は変わったかもしれませんが）。ただし、Sidekiq のエンタープライズ版にはスケジューリング機能が標準搭載されていると理解しています。

Sidekiq は、インメモリデータ構造ストアである [Redis](https://en.wikipedia.org/wiki/Redis) を使用しており、これも Ruby で書かれています。Sidekiq は Redis キューからジョブを読み取り、ジョブを処理するために [先入れ先出し](https://en.wikipedia.org/wiki/FIFO_(computing_and_electronics)) (FIFO) モデルを採用しています。ジョブ処理は非同期で行われ、重いタスクを「スケジューリング」してバックグラウンドで実行させることで、Web スレッドが生きたリクエストに応答できるようにします。

Sidekiq は「よく知られたキュー処理ソフトウェア」として説明されており、Discourse では Web アプリケーションのリクエスト内で直接実行されるのではなく、バックグラウンドタスクとして実行されるように設計されたジョブに使用されています。

上記の簡単な概要に基づき、Discourse が実行するジョブのさまざまな種類は、Discourse のリポジトリで確認できます。

> **[discourse/app/jobs at main · discourse/discourse](https://github.com/discourse/discourse/tree/main/app/jobs)**
>
> A platform for community discussion. Free, open, simple. - discourse/discourse

Redis は Discourse のアーキテクチャの他の部分でも使用されている可能性がありますが、私の記憶にある限り、Redis の主な用途は Sidekiq（通称「ジョブ担当」）の「コンパニオン」として機能することです。Discourse の HLA（High-Level Architecture）について私よりも詳しい Discourse チームメンバーが、Discourse の HLA 内で Redis がどのように使用されているかについて、さらに詳しい説明を加えてくれるはずです。

お役に立てれば幸いです。

---

<div class="post-metadata">

### Author: ![sethherr](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/sethherr/32/121909_2.png) [@sethherr](https://meta.discourse.org/u/sethherr)
#### Post date: [2021 年 4 月 6 日午後 8:23 UTC](https://meta.discourse.org/t/what-does-discourse-use-redis-for/155042/4 "2021-04-06T20:23:20Z")

</div>

これは少し古い投稿ですが、他の Discourse の Redis 関連の情報を検索している際にこの問題に遭遇したため、この返信を補足しておきます。

Discourse が Sidekiq 以外に Redis を何に使用しているかという質問に対するチームメンバーからの回答は以下の通りです。

> [@Minimum Redis Version](https://meta.discourse.org/t/minimum-redis-version/181415/4):
>
> Quite a lot actually. We use Redis backend in the [GitHub - discourse/message\_bus: A reliable and robust messaging bus for Ruby and Rack](https://github.com/discourse/message_bus) gem for live page updates, for the Rails cache, for the distributed rate limit, for our semaphore system, etc.

---

<div class="post-metadata">

### Author: ![argosdev](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/argosdev/32/270935_2.png) [@argosdev](https://meta.discourse.org/u/argosdev)
#### Post date: [2022 年 8 月 17 日午後 7:26 UTC](https://meta.discourse.org/t/what-does-discourse-use-redis-for/155042/5 "2022-08-17T19:26:01Z")

</div>

@Francisさん、DigitalOceanのサービス全体の請求額の見積もりはいくらでしたか？Google Cloudに同じサービスをインストールする予定なので、興味があります（無料の200ドル）。DiscourseのSaaSサービスの価格は予算オーバーです。

---

<div class="post-metadata">

### Author: ![pfaffman](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pfaffman/32/120154_2.png) [@pfaffman](https://meta.discourse.org/u/pfaffman)
#### Post date: [2022 年 8 月 18 日午後 7:34 UTC](https://meta.discourse.org/t/what-does-discourse-use-redis-for/155042/6 "2022-08-18T19:34:14Z")

</div>

推測ですが、ロードバランサー、Redis、Postgresで月額50ドルに加えて、ドロップレット（複数可）の料金がかかるでしょう。

コストが気になる場合は、2GBのドロップレットをお勧めします。それでも足りない場合は倍増させてください。
