Rumah > Artikel > pembangunan bahagian belakang > Bagaimana untuk membina API RESTful menggunakan Golang dan menggunakan caching?
Sepadukan cache apabila membina API RESTful dengan Golang: gunakan Gin untuk mencipta API;
Cara untuk menyepadukan caching apabila membina API RESTful dengan Golang
Apabila membina API RESTful, caching boleh meningkatkan prestasi, mengurangkan beban pelayan dan meningkatkan pengalaman pengguna. Artikel ini akan membimbing anda membina API RESTful dan menyepadukan caching menggunakan Golang.
Buat API RESTful menggunakan Gin
Mula-mula, buat API RESTful Golang baharu menggunakan rangka kerja Gin:
import ( "github.com/gin-gonic/gin" ) func main() { r := gin.Default() r.GET("/api/v1/users", GetUsers) r.Run() }
Mengintegrasikan Redis Cache
Untuk menggunakan redis nilai, kami akan sangat tersedia untuk menggunakan caching. kedai . Pastikan Redis dipasang dan berjalan.
Di Golang, kita boleh menggunakan perpustakaan redigo untuk menyambung ke 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") }, } }
Lapisan Cache
Sekarang, mari tentukan lapisan baharu untuk mengurus cache. Lapisan ini akan menyediakan fungsi untuk mendapatkan, menetapkan dan memadam nilai cache.
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 }
Menggunakan caching
Dalam fungsi pengendali Gin, kita boleh menggunakan lapisan caching untuk cache tindak balas API. Berikut ialah fungsi pengendali GetUsers
yang diubah suai:
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 }
Sekarang, API akan mula-mula mendapat respons daripada cache, dan jika nilai itu tidak wujud dalam cache, ia akan mendapat data daripada pangkalan data dan menyimpannya dalam cache. Ini akan mengurangkan dengan ketara pertanyaan pangkalan data yang diminta pendua, dengan itu meningkatkan prestasi.
Atas ialah kandungan terperinci Bagaimana untuk membina API RESTful menggunakan Golang dan menggunakan caching?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!