Golang API のキャッシュ戦略により、パフォーマンスが向上し、サーバーの負荷が軽減されます。一般的に使用される戦略は、LRU、LFU、FIFO、TTL です。最適化手法には、適切なキャッシュ ストレージの選択、階層型キャッシュ、無効化管理、監視とチューニングが含まれます。実際には、データベースからユーザー情報を取得するための API を最適化するために LRU キャッシュが使用され、データをキャッシュから迅速に取得できます。それ以外の場合、キャッシュはデータベースから取得した後に更新されます。
キャッシュ戦略
キャッシュは、後続のリクエストに迅速に応答するために、最近取得したデータを保存するテクノロジーです。 Golang API では、キャッシュ戦略によりパフォーマンスが大幅に向上し、待ち時間が短縮され、サーバー負荷が軽減されます。一般的な戦略には次のものがあります。
LRU (最も最近使用されていない) : 最も最近使用されていない項目を削除して、新しいデータ用のスペースを確保します。
LFU (最も最近使用されていない): 最も使用頻度の低いアイテムを削除します。
FIFO (先入れ先出し): キャッシュに追加された最初のアイテムを削除します。
TTL (Time to Live): アイテムが自動的に削除されるまでの時間制限を設定します。
最適化のヒント
適切なキャッシュ戦略の選択に加えて、次のヒントにより Golang API のキャッシュ パフォーマンスをさらに最適化できます:
実際的なケース
データベースからユーザー情報を取得する単純な Golang API を考えてみましょう:
package api import ( "context" "database/sql" "fmt" ) // User represents a user in the system. type User struct { ID int64 Name string } // GetUserInfo retrieves user information from the database. func GetUserInfo(ctx context.Context, db *sql.DB, userID int64) (*User, error) { row := db.QueryRowContext(ctx, "SELECT id, name FROM users WHERE id = ?", userID) var user User if err := row.Scan(&user.ID, &user.Name); err != nil { return nil, fmt.Errorf("failed to scan user: %w", err) } return &user, nil }
LRU キャッシュを使用してこの API を最適化できます:
package api import ( "context" "database/sql" "fmt" "sync" "time" "github.com/golang/lru" ) // Cache holds a LRU cache for user information. type Cache struct { mu sync.RWMutex cache *lru.Cache } // NewCache creates a new LRU cache with a maximum size of 100 entries. func NewCache() (*Cache, error) { cache, err := lru.New(100) if err != nil { return nil, fmt.Errorf("failed to create LRU cache: %w", err) } return &Cache{cache: cache}, nil } // GetUserInfo retrieves user information from the database or cache. func (c *Cache) GetUserInfo(ctx context.Context, db *sql.DB, userID int64) (*User, error) { c.mu.RLock() user, ok := c.cache.Get(userID) c.mu.RUnlock() if ok { return user.(*User), nil } c.mu.Lock() defer c.mu.Unlock() user, err := GetUserInfo(ctx, db, userID) if err != nil { return nil, err } c.cache.Add(userID, user) return user, nil }
キャッシュされた GetUserInfo メソッドは、最初にキャッシュ内にあるかどうかを確認します。データはあります。存在する場合は、キャッシュされたデータをすぐに返します。そうでない場合は、データベースからデータをフェッチし、キャッシュに追加して、それを返します。
以上がGolang API のキャッシュ戦略と最適化の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。