Rumah > Artikel > pembangunan bahagian belakang > Panduan Permulaan: Analisis komprehensif teknologi caching di Golang.
Golang ialah bahasa pengaturcaraan yang sangat popular sejak beberapa tahun kebelakangan ini, ia popular kerana prestasi konkurensi yang berkuasa dan sintaks yang ringkas. Di Golang, teknologi caching adalah komponen yang sangat penting. Caching boleh membantu kami memendekkan masa tindak balas dan meningkatkan prestasi sistem Artikel ini akan menyediakan analisis komprehensif teknologi caching di Golang untuk membantu pemula lebih memahami dan menggunakan teknologi caching.
1. Apakah itu cache?
Cache ialah kaedah penyimpanan data tambahan yang digunakan untuk mempercepatkan akses kepada data dan meningkatkan prestasi sistem. Intipati caching adalah untuk mengimbangi kelajuan akses dan ruang storan Beberapa data yang biasa digunakan boleh disimpan dalam cache untuk mempercepatkan akses. Dalam aplikasi web, kelajuan pengkomputeran pelayan secara amnya lebih cepat daripada kelajuan membaca cakera keras Menyimpan data dalam memori boleh meningkatkan kelajuan tindak balas.
2. Cache dalam Golang
Di Golang, terdapat dua kaedah caching biasa: cache memori dan cache teragih. Setiap satu akan diperkenalkan secara terperinci di bawah.
Cache memori menyimpan data dalam memori komputer untuk mempercepatkan capaian data. Di Golang, cache memori biasanya dilaksanakan menggunakan peta atau kepingan.
Gunakan peta untuk melaksanakan cache memori:
package main import ( "fmt" "time" ) func main() { cache := make(map[string]string) cache["key1"] = "value1" cache["key2"] = "value2" // 读缓存 cacheValue, ok := cache["key1"] if ok { fmt.Println("cache hit:", cacheValue) } else { fmt.Println("cache miss") } // 延迟1秒后写入新的缓存 time.Sleep(1 * time.Second) cache["key3"] = "value3" }
Dalam kod di atas, kami menggunakan fungsi make
untuk mencipta pembolehubah jenis peta jenis rentetan cache
dan menambah dua pasangan nilai kunci . Apabila membaca cache, kami mula-mula mendapatkan sama ada nilai cache wujud melalui pembolehubah ok
, dan jika ia wujud, cetak kandungan cache. Akhir sekali, selepas mensimulasikan kelewatan 1 saat melalui fungsi time.Sleep
, kami menambah pasangan nilai kunci baharu pada cache.
Gunakan slice untuk melaksanakan cache memori:
package main import ( "fmt" "time" ) type CacheItem struct { Key string Value string } func main() { cache := []CacheItem{ {Key: "key1", Value: "value1"}, {Key: "key2", Value: "value2"}, } // 读缓存 cacheValue, ok := findCacheItemByKey(cache, "key1") if ok { fmt.Println("cache hit:", cacheValue.Value) } else { fmt.Println("cache miss") } // 延迟1秒后写入新的缓存 time.Sleep(1 * time.Second) cache = append(cache, CacheItem{Key: "key3", Value: "value3"}) } func findCacheItemByKey(cache []CacheItem, key string) (CacheItem, bool) { for _, item := range cache { if item.Key == key { return item, true } } return CacheItem{}, false }
Dalam kod di atas, kami mencipta struktur CacheItem
untuk mewakili setiap elemen dalam cache, dan kemudian gunakan slice untuk menyimpan berbilang CacheItem
Struktur. Apabila membaca cache, kami memanggil fungsi findCacheItemByKey
untuk mencari elemen dalam cache. Akhir sekali, selepas mensimulasikan kelewatan 1 saat melalui fungsi time.Sleep
, kami menambah elemen CacheItem
baharu pada cache.
Dalam cache memori, kita perlu memberi perhatian kepada kapasiti cache dan masa tamat tempoh cache. Jika kapasiti cache terlalu kecil, ia akan menyebabkan kegagalan cache dengan mudah dan meningkatkan bilangan akses pangkalan data. Jika masa tamat cache ditetapkan secara tidak betul, ia juga akan menyebabkan kadar hit cache berkurangan, sekali gus menjejaskan prestasi sistem.
Cache teragih menyimpan data dalam ingatan berbilang komputer untuk mempercepatkan bacaan data. Di Golang, cache edaran biasa termasuk Memcached dan Redis.
Gunakan Memcached sebagai cache teragih:
package main import ( "fmt" "time" "github.com/bradfitz/gomemcache/memcache" ) func main() { mc := memcache.New("127.0.0.1:11211") mc.Set(&memcache.Item{Key: "key1", Value: []byte("value1")}) mc.Set(&memcache.Item{Key: "key2", Value: []byte("value2")}) // 读缓存 cacheValue, err := mc.Get("key1") if err == nil { fmt.Println("cache hit:", string(cacheValue.Value)) } else { fmt.Println("cache miss") } // 延迟1秒后写入新的缓存 time.Sleep(1 * time.Second) mc.Set(&memcache.Item{Key: "key3", Value: []byte("value3")}) }
Dalam kod di atas, kami mula-mula membuat instantiate klien Memcached melalui pakej gomemcache/memcache
dan menambah dua pasangan nilai kunci padanya. Apabila membaca cache, kami memanggil fungsi Get
untuk mendapatkan nilai cache. Akhir sekali, selepas mensimulasikan kelewatan 1 saat melalui fungsi time.Sleep
, kami menambah pasangan nilai kunci baharu pada cache.
Gunakan Redis sebagai cache teragih:
package main import ( "fmt" "time" "github.com/go-redis/redis" ) func main() { rdb := redis.NewClient(&redis.Options{ Addr: "localhost:6379", Password: "", DB: 0, }) defer rdb.Close() rdb.Set("key1", "value1", 0) rdb.Set("key2", "value2", 0) // 读缓存 cacheValue, err := rdb.Get("key1").Result() if err == nil { fmt.Println("cache hit:", cacheValue) } else { fmt.Println("cache miss") } // 延迟1秒后写入新的缓存 time.Sleep(1 * time.Second) rdb.Set("key3", "value3", 0) }
Dalam kod di atas, kami mula-mula membuat instantiate klien Redis melalui pakej go-redis/redis
dan menambah dua pasangan nilai kunci padanya. Apabila membaca cache, kami memanggil fungsi Get
untuk mendapatkan nilai cache. Akhir sekali, selepas mensimulasikan kelewatan 1 saat melalui fungsi time.Sleep
, kami menambah pasangan nilai kunci baharu pada cache.
3. Senario aplikasi cache
Senario aplikasi cache biasa termasuk:
4 Ringkasan
Artikel ini menyediakan analisis komprehensif teknologi caching di Golang, memperkenalkan dua bentuk caching biasa, cache memori dan cache yang diedarkan, dan memberikan contoh cara untuk Kedua-dua cache. digunakan di Golang. Di samping itu, artikel ini juga memperkenalkan senario aplikasi caching secara terperinci, dengan harapan dapat membantu pemula lebih memahami dan menggunakan teknologi caching serta meningkatkan prestasi sistem.
Atas ialah kandungan terperinci Panduan Permulaan: Analisis komprehensif teknologi caching di Golang.. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!