ホームページ >バックエンド開発 >Golang >Golang の Web フレームワーク Buffalo フレームワークを使用したローカル キャッシュの実装

Golang の Web フレームワーク Buffalo フレームワークを使用したローカル キャッシュの実装

王林
王林オリジナル
2023-06-24 09:21:061189ブラウズ

ローカル キャッシュは 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.RouteMatchStructure を使用して現在のルーティング情報と名前。次に、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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。