Redis に基づく、Rails アプリ用の効率的な SystemSettings モジュールを実装しようとしています。
ほとんどすべてのリクエストで SystemSettings モジュールを使用しているため、これは可能な限り高速である必要があります。したがって、このモジュールを呼び出すことで生じるオーバーヘッドを最小限に抑えようとしています。
モジュールには、値を追加/削除/更新するための対応する Web UI も含まれます。
最も単純な実装は明らかに各操作で Redis サーバーを呼び出すことですが、Redis サービスは Web サーバーとは別のサーバーにあるため、これは明らかにすべての操作でネットワーク オーバーヘッドを作成します。 .
一定期間値をキャッシュする方法を探しています。その間、Redis サービスを呼び出す代わりに、キャッシュされた結果を返すだけです。
私たちが思いついた唯一の良い解決策はActionDispatch::Callbacks
、設定キャッシュを更新する時が来たかどうかを判断するために使用することでした. 問題は、ランダムなユーザー要求に基づいてキャッシュの更新を行うのは間違っているように思われることです。
また、キャッシュの更新を開始するアクションを「トリガー」する特定の URL を呼び出す、約 5 分ごとに実行される小さなスクリプトを作成することも考えていました。このソリューションの問題点は、すべての Passenger プロセスではなく、Passenger プロセスの 1 つ (リクエストを処理したプロセス) のキャッシュ リフレッシュのみが行われることです。
何か案は?