ローカル キャッシュは Web 開発で一般的に使用されるテクノロジであり、Web アプリケーションのパフォーマンスと可用性を向上させることができます。開発プロセスでは、特定のフレームワークを使用してローカル キャッシュを実装する必要があることがよくありますが、この記事では、Golang の Web フレームワークである Buffalo フレームワークを使用してローカル キャッシュを実装する方法を紹介します。
Buffalo フレームワークは、Golang 言語をベースに開発された Web フレームワークです。 Buffalo フレームワークでは、ローカル キャッシュを簡単に実装でき、Web アプリケーションのパフォーマンスを大幅に向上させることができます。以下では、Buffalo フレームワークを使用してローカル キャッシュを実装する方法を紹介します。
ステップ 1: 新しい Buffalo アプリケーションを作成する
Buffalo フレームワークを使用してローカル キャッシュを実装するには、まず新しい Buffalo アプリケーションを作成する必要があります。次のコマンドを使用して、新しい Buffalo アプリケーションを作成できます:
$ buffalo new myapp
これにより、myapp
という名前の新しい Buffalo アプリケーションが作成されます。
ステップ 2: Gorilla/mux 依存関係を追加する
Gorilla/mux を HTTP ルーターとして使用します。このためには、gorilla/mux の依存関係を追加する必要があります。これを行うには、go.mod
ファイルに次の行を追加します。
require github.com/gorilla/mux v1.8.0
次に、次のコマンドを実行して依存関係をダウンロードします。
$ go mod download
ステップ 3: 作成キャッシュ コントローラー
すべてのリクエストを処理するキャッシュ コントローラーを作成する必要があります。CacheController
という新しいファイルを作成し、次のコードを追加します。
package actions import ( "net/http" "time" "github.com/gorilla/mux" "github.com/gobuffalo/buffalo" "github.com/gobuffalo/buffalo/cache" ) func CacheController() buffalo.Handler { // create a map to store the cache entries var cacheEntries = make(map[string]cache.Store) return func(c buffalo.Context) error { // get the current route route := c.Value("current_route").(mux.RouteMatch) // get the cache entry name cacheKey := route.Route.GetName() // check if the cache entry exists if cacheEntry, ok := cacheEntries[cacheKey]; ok { // if it does, get the value from the cache cachedValue, err := cacheEntry.Get(c.Request().URL.String()) if err == nil { // if there's no error, return the value from the cache return c.Render(http.StatusOK, r.JSON(cachedValue)) } } // if the cache entry doesn't exist or there was an error getting // the value from the cache, run the handler and cache the result h := route.Route.GetHandler() res := h(c) cacheStore := cache.NewCache(time.Minute * 1) cacheStore.Add(c.Request().URL.String(), res.Body.String()) cacheEntries[cacheKey] = cacheStore return res } }
このコントローラーでは、ゴリラ/マルチプレクサのmux.RouteMatch
Structure を使用して現在のルーティング情報と名前。次に、Buffalo のcache
パッケージを使用してキャッシュを実装します。キャッシュをチェックするときは、まずルートがキャッシュmap
に存在するかどうかを確認し、次にキャッシュ内にリクエスト URL と一致するものが存在するかどうかを確認します。一致する場合はキャッシュされた値が返され、一致しない場合はハンドラーが実行され、結果がキャッシュされます。
ステップ 4: ルーターでキャッシュ コントローラーを使用する
これで、ルーターでキャッシュ コントローラーを使用できるようになります。ルーターのミドルウェアにCacheController
コントローラーを追加するだけです。次のコードを使用してこのプロセスを実装できます:
func (a *App) cacheRoutes() { r := a.Router r.Use(func(next buffalo.Handler) buffalo.Handler { return func(c buffalo.Context) error { c.Set("start_time", time.Now()) return next(c) } }) r.Use(CacheController()) }
この例では、リクエストの期間とパフォーマンスを記録する開始時間ミドルウェアも追加します。
ステップ 5: キャッシュをテストする
これで、キャッシュが適切に動作しているかどうかをテストできます。次のコマンドを使用して Buffalo アプリケーションを起動できます:
$ buffalo dev
その後、curl などのツールを使用してキャッシュをテストできます。例:
$ curl http://localhost:3000/api/v1/items
このコマンドを複数回実行して、キャッシュをテストできます。最初の実行でキャッシュがいっぱいになり、2 回目以降の実行ではキャッシュされた値が返されます。
結論
この記事では、Buffalo フレームワークを使用してローカル キャッシュを実装する方法を紹介しました。 Buffalo フレームワークは、多くの一般的なタスクと操作を簡素化するため、Web アプリケーション開発に非常に役立ちます。 Buffalo フレームワークと、ゴリラ/マルチプレクサや Buffalo のキャッシュ パッケージなどの他の依存関係を使用することで、ローカル キャッシュを簡単に実装し、Web アプリケーションのパフォーマンスと可用性を向上させることができます。
以上がGolang の Web フレームワーク Buffalo フレームワークを使用したローカル キャッシュの実装の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。