Go言語のHTTPサーバー機能を使って動的ルーティングのキャッシュ機能を実装するにはどうすればよいですか?
キャッシュはアプリケーションのパフォーマンスを向上させるための一般的な方法です。キャッシュを使用すると、頻繁な計算やデータ取得が回避され、サーバーの負荷が軽減され、応答速度が向上します。 Go言語を使用してWebアプリケーションを構築する場合、Go言語のHTTPサーバー機能を利用して動的ルーティングのキャッシュ機能を実装できます。この記事では、Go 言語の http
パッケージと http.HandlerFunc
タイプを使用してこの関数を実装する方法と、簡単なサンプル コードを紹介します。
HTTP サーバーでのキャッシュのセットアップには、通常、応答ヘッダーとキャッシュ制御ポリシーの設定という 2 つの手順が含まれます。
応答ヘッダーは、サーバーから返されたコンテンツをブラウザが処理する方法を決定します。 Cache-Control
フィールドと Expires
フィールドを設定することで、キャッシュ戦略を指定できます。このうち、Cache-Control
フィールドは、キャッシュの可否やキャッシュの有効期間など、キャッシュの動作を指定するために使用され、Expires
フィールドは、キャッシュの動作を指定するために使用されます。キャッシュの有効期限。
以下は、応答ヘッダーのキャッシュ ポリシーを設定するためのサンプル コードです。
func setCacheHeaders(w http.ResponseWriter) { w.Header().Set("Cache-Control", "public, max-age=3600") w.Header().Set("Expires", time.Now().Add(time.Hour).Format(http.TimeFormat)) }
上記のコードでは、 w.Header().Set(key, value )
メソッドを使用して応答ヘッダーを設定します。key
はフィールド名、value
はフィールドの値です。 Cache-Control
フィールドの値は public, max-age=3600
です。これは、キャッシュがパブリックであり、ブラウザーによってキャッシュできること、およびキャッシュの有効期間が3600秒。 Expires
フィールドの値は、現在時刻に 1 時間を加えたもので、time.Now().Add(time.Hour)
および http.TimeFormat# を使用して表現されます。 ## 時間を HTTP 標準形式にフォーマットします。
http.HandlerFunc タイプの処理関数をカスタマイズし、それにキャッシュ ロジックを実装できます。
type CacheHandler struct { cache map[string]string mux sync.RWMutex } func (c *CacheHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) { // 检查缓存中是否已存在请求路径的结果 c.mux.RLock() result, ok := c.cache[r.URL.Path] c.mux.RUnlock() if ok { // 如果缓存存在,则直接将结果返回给客户端 w.WriteHeader(http.StatusOK) w.Write([]byte(result)) } else { // 如果缓存不存在,则调用真正的处理逻辑,并将结果存入缓存 // 除了设置响应头部,还可以在这里添加其他的缓存控制策略,比如ETag、Last-Modified等 setCacheHeaders(w) // 处理逻辑... // 这里仅作示例,直接返回请求路径 c.mux.Lock() c.cache[r.URL.Path] = r.URL.Path c.mux.Unlock() w.WriteHeader(http.StatusOK) w.Write([]byte(r.URL.Path)) } } func main() { cacheHandler := &CacheHandler{ cache: make(map[string]string), } http.Handle("/", cacheHandler) http.ListenAndServe(":8080", nil) }上記のコードでは、# を含む
CacheHandler 型を定義します。 ##cache
フィールドはキャッシュされた結果を保存するために使用され、mux
フィールドは同時実行の安全性を確保するために使用されます。
型は、http.ResponseWriter
および http.Request
パラメータを受け取る ServeHTTP
メソッドを実装します。 、HTTP リクエストとレスポンスを処理するために使用されます。 ServeHTTP
メソッドでは、まずリクエスト パスの結果が既に存在するかどうかをキャッシュから確認します。キャッシュが存在する場合、結果はクライアントに直接返されます。そうでない場合、実際の処理ロジックが呼び出され、結果がキャッシュに格納されます。
関数では、CacheHandler
インスタンスを作成し、http.Handle
関数 #http を通じてそれをデフォルトの ## に登録します。 .ServeMux をオンにします。最後に、
http.ListenAndServe 関数を呼び出して HTTP サーバーを起動し、
:8080 ポートでリッスンします。
まとめ
以上がGo言語のHTTPサーバー機能を使って動的ルーティングのキャッシュ機能を実装するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。