Golang で RESTful API を構築する場合はキャッシュを統合します。Gin を使用して API を作成し、Redis キャッシュを統合します。Gin ハンドラー関数でキャッシュ レイヤーを使用して Redis からデータを取得および設定します。
Golang で RESTful API を構築するときにキャッシュを統合する方法
RESTful API を構築する場合、キャッシュによってパフォーマンスが大幅に向上し、サーバーの負荷が軽減され、ユーザー エクスペリエンスが向上します。この記事では、Golang を使用して RESTful API を構築し、キャッシュを統合する方法を説明します。
Gin を使用して RESTful API を作成する
まず、Gin フレームワークを使用して新しい Golang RESTful API を作成します:
import ( "github.com/gin-gonic/gin" ) func main() { r := gin.Default() r.GET("/api/v1/users", GetUsers) r.Run() }
Redis キャッシュの統合
キャッシュを使用するには、可用性の高い Key-Value である Redis を使用します。店 。 Redis がインストールされ、実行されていることを確認します。
Golang では、redigo ライブラリを使用して Redis に接続できます:
import ( "time" "github.com/gomodule/redigo/redis" ) // redisPool is a global variable to manage the Redis connection pool. var redisPool *redis.Pool func init() { redisPool = &redis.Pool{ MaxIdle: 10, MaxActive: 10, IdleTimeout: 30 * time.Second, Dial: func() (redis.Conn, error) { return redis.Dial("tcp", "localhost:6379") }, } }
キャッシュレイヤー
次に、キャッシュを管理するための新しいレイヤーを定義しましょう。このレイヤーは、キャッシュされた値を取得、設定、削除する関数を提供します。
import ( "time" "github.com/gomodule/redigo/redis" ) type Cache struct { pool *redis.Pool } func NewCache(pool *redis.Pool) *Cache { return &Cache{ pool: pool, } } func (c *Cache) Get(key string) ([]byte, error) { conn := c.pool.Get() defer conn.Close() return redis.Bytes(conn.Do("GET", key)) } func (c *Cache) Set(key string, value string) error { conn := c.pool.Get() defer conn.Close() _, err := conn.Do("SET", key, value) return err } func (c *Cache) Delete(key string) error { conn := c.pool.Get() defer conn.Close() _, err := conn.Do("DEL", key) return err }
キャッシュの使用
gin ハンドラー関数では、キャッシュ層を使用して API 応答をキャッシュできます。変更された GetUsers
ハンドラー関数は次のとおりです:
func GetUsers(c *gin.Context) { // 获取 Redis 缓存 key := "users" cachedBytes, err := cache.Get(key) if err != nil { // 缓存中没有值,从数据库中获取 users, err := getUserFromDB() if err != nil { c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()}) return } // 将 users 序列化为 JSON 并存储在缓存中 userJSON, err := json.Marshal(users) if err != nil { c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()}) return } err = cache.Set(key, string(userJSON)) if err != nil { c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()}) return } c.JSON(http.StatusOK, users) } else { // 从缓存中获取值,反序列化回 []User 类型 var users []User err := json.Unmarshal(cachedBytes, &users) if err != nil { c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()}) return } c.JSON(http.StatusOK, users) } } // getUserFromDB 从数据库中获取用户 func getUserFromDB() ([]User, error) { // 假设这是从数据库获取用户数据的模拟函数 return []User{{ID: 1, Name: "John"}}, nil }
これで、API は最初にキャッシュから応答を取得し、値がキャッシュに存在しない場合は、データベースからデータを取得してキャッシュに保存します。これにより、重複してリクエストされたデータベース クエリが大幅に削減され、パフォーマンスが向上します。
以上がGolang を使用して RESTful API を構築し、キャッシュを使用するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。