Golang ialah bahasa pengaturcaraan sumber terbuka yang menyokong pengaturcaraan serentak dan selari serta sangat baik dalam mengendalikan permintaan serentak yang tinggi. Sama seperti bahasa pengaturcaraan lain, Golang juga mempunyai mekanisme caching sendiri untuk meningkatkan prestasi program dan kelajuan tindak balas. Jadi, adakah Golang mempunyai cache? Artikel ini akan menjawab soalan ini untuk anda.
Bahasa Golang itu sendiri pada asasnya tidak mempunyai mekanisme caching terbina dalam, tetapi ia menyediakan beberapa struktur data yang cekap untuk melaksanakan caching. Antaranya, yang paling biasa digunakan ialah Peta (kamus) terbina dalam dan kunci dalam pakej Penyegerakan.
Peta terbina dalam ialah salah satu struktur data yang paling biasa digunakan dalam bahasa Golang. Ia menyediakan pemetaan pasangan nilai kunci. Kita boleh menggunakan Map untuk melaksanakan mekanisme caching yang mudah. Sebagai contoh, kita boleh cache data dalam Peta dan kemudian mendapatkannya daripadanya apabila diperlukan. Jika tiada data dalam cache, kami mendapat data daripada pangkalan data atau API dan menyimpan hasilnya dalam cache.
Berikut ialah contoh mudah yang menunjukkan cara menggunakan Map untuk menyimpan dan mendapatkan semula data cache:
package main import ( "fmt" "time" ) func main() { cache := make(map[string]string) //添加缓存项 cache["key1"] = "value1" cache["key2"] = "value2" fmt.Println("Cache:", cache) //检索缓存 value, found := cache["key1"] if found { fmt.Println("Value:", value) } //等待一段时间,模拟缓存过期 time.Sleep(time.Second * 5) //检测缓存是否过期 _, found = cache["key1"] if !found { fmt.Println("Cache expired") } }
Dalam contoh di atas, kami telah menggunakan struktur data Peta terbina dalam untuk menyimpan data cache . Kami boleh menambah atau mengemas kini nilai cache menggunakan sintaks nilai kunci standard. Apabila kami perlu mendapatkan semula data daripada cache, kami boleh melakukannya menggunakan sintaks nilai kunci yang sama. Kaedah ini sangat mudah, tetapi ia tidak melaksanakan ciri tamat tempoh cache. Untuk melaksanakan tamat tempoh cache, kita perlu menggunakan cap masa atau menetapkan pemasa untuk membezakan tempoh sah data cache.
Selain struktur data Peta terbina dalam, Golang juga menyediakan pakej Penyegerakan, yang mengandungi beberapa primitif untuk pengaturcaraan serentak. Primitif ini termasuk kunci mutex, kunci baca-tulis dan pembolehubah keadaan. Melalui primitif ini, kami boleh melaksanakan mekanisme caching serentak yang cekap.
Berikut ialah contoh caching serentak menggunakan mutex:
package main import ( "fmt" "sync" "time" ) //定义一个缓存结构体 type Cache struct { sync.Mutex data map[string]string expire map[string]int64 } //添加缓存项 func (c *Cache) Set(key, value string, expire time.Duration) { c.Lock() defer c.Unlock() c.data[key] = value c.expire[key] = time.Now().Add(expire).UnixNano() } //检索缓存项 func (c *Cache) Get(key string) (string, bool) { c.Lock() defer c.Unlock() if expired, found := c.expire[key]; found { if time.Now().UnixNano() > expired { //缓存过期 delete(c.data, key) delete(c.expire, key) return "", false } } value, found := c.data[key] return value, found } func main() { //初始化缓存结构体 cache := Cache{ data: make(map[string]string), expire: make(map[string]int64), } //添加缓存项 cache.Set("key1", "value1", time.Second * 3) //检索缓存项 value, found := cache.Get("key1") if found { fmt.Println("Value:", value) } //等待一段时间,模拟缓存过期 time.Sleep(time.Second * 5) //检测缓存是否过期 _, found = cache.Get("key1") if !found { fmt.Println("Cache expired") } }
Dalam contoh di atas, kami menggunakan mutex untuk melindungi operasi baca dan tulis data cache, dengan menetapkan Had masa daripada item cache dibandingkan dengan masa semasa untuk menentukan sama ada item cache telah tamat tempoh, supaya cache boleh dibersihkan apabila ia tamat tempoh.
Ringkasnya, bahasa Golang tidak mempunyai mekanisme caching terbina dalam, tetapi kita boleh menggunakan kaedah yang cekap seperti struktur data Peta dan primitif kunci dalam pakej Sync untuk melaksanakan mekanisme caching untuk menambah baik program prestasi dan kelajuan.
Atas ialah kandungan terperinci Adakah golang mempunyai cache?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!