Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Amalan menggunakan cache untuk mempercepatkan kecekapan tindak balas pelayan di Golang.

Amalan menggunakan cache untuk mempercepatkan kecekapan tindak balas pelayan di Golang.

王林
王林asal
2023-06-20 12:36:10628semak imbas

Golang ialah bahasa pengaturcaraan moden yang sangat popular dalam pembangunan aplikasi bahagian pelayan. Walau bagaimanapun, beberapa kesesakan prestasi pelayan boleh menyebabkan respons pelayan menjadi perlahan apabila memproses permintaan. Kesesakan ini mungkin berkaitan dengan memproses sejumlah besar data, kependaman rangkaian atau isu berkaitan benang lain. Dalam artikel ini, kami akan meneroka cara menggunakan caching untuk mempercepatkan kecekapan tindak balas pelayan Golang anda dan menyediakan beberapa amalan terbaik dan kod sampel.

  1. Apakah itu cache?

Cache ialah mekanisme untuk menyimpan data buat sementara waktu yang digunakan untuk mengurangkan akses kepada memori belakang atau pemproses. Apabila data yang sama diminta berulang kali, caching boleh mengelakkan permintaan dan pemprosesan data yang tidak perlu dengan berkesan, sekali gus meningkatkan prestasi pelayan. Di Golang, kami boleh menggunakan perpustakaan pihak ketiga untuk melaksanakan caching.

  1. Jenis cache

Di Golang, kita boleh menggunakan dua jenis cache: cache setempat dan cache teragih.

2.1 Cache setempat

Cache tempatan merujuk kepada mekanisme yang menyimpan cache dalam ingatan. Caching jenis ini biasanya hanya sesuai untuk aplikasi contoh tunggal kerana jika kita menggunakan berbilang kejadian, setiap kejadian akan mempunyai cache sendiri. Sebenarnya, caching tempatan sangat mudah untuk dilaksanakan dan hanya perlu menggunakan peta. Di bawah, kami akan menunjukkan cara menggunakan peta untuk melaksanakan caching tempatan.

var cache = map[string]interface{}{} // 定义一个 map 作为缓存

func Cache(key string, f func() interface{}) interface{} {
  if data, ok := cache[key]; ok { // 如果数据存在,则直接返回
    return data
  }
  result := f() // 运行函数获取数据
  cache[key] = result // 存储到缓存中
  return result // 返回结果
}

Dalam kod di atas, apabila kita memanggil fungsi Cache untuk mendapatkan data, jika data sudah wujud dalam cache, data dalam cache akan dikembalikan. Jika tidak, kami akan memanggil fungsi yang disediakan (iaitu f()) untuk mendapatkan data dan menyimpannya dalam cache.

2.2 Cache Teragih

Apabila kita perlu melaksanakan aplikasi berbilang contoh, kita perlu menggunakan cache teragih. Cache teragih merujuk kepada mekanisme yang menyimpan cache pada berbilang pelayan, yang boleh berkongsi data cache.

Di Golang, kami boleh menggunakan sistem caching teragih sumber terbuka seperti Memcached dan Redis. Sistem ini menyediakan kaedah cache untuk menyimpan dan mendapatkan semula data, dan ia sangat boleh dipercayai dan berskala.

  1. Amalan

Kami tahu bahawa senario penggunaan cache yang paling biasa adalah untuk menyimpan data. Mari kita lihat cara menggunakan caching dalam Golang untuk mengoptimumkan masa tindak balas pelayan kami.

3.1 Menyimpan data yang kerap digunakan

Kami boleh menggunakan cache untuk menyimpan data kami yang paling biasa digunakan. Sebagai contoh, jika kami perlu mendapatkan maklumat yang sama daripada pangkalan data dalam setiap permintaan, kami boleh menyimpan maklumat ini dalam cache untuk meningkatkan kelajuan tindak balas pelayan. Berikut ialah contoh cara untuk melaksanakan ini:

func main() {
  db.InitDB()
  userInfo := FetchUserInfoFromDB("user-id-123")
  Cache("userInfo-user-id-123", func() interface{} {
     return userInfo
  })
}

func users(w http.ResponseWriter, r *http.Request) {
  cacheData := Cache("userInfo-user-id-123", func() interface{} {
     return FindUserByID("user-id-123")
  })
  response(w, r, http.StatusOK, cacheData)
}

Dalam kod di atas, kami mengekstrak maklumat pengguna daripada pangkalan data dan memasukkannya ke dalam cache apabila aplikasi dimulakan. Apabila pengguna menghantar permintaan baharu, kami akan membaca data ini daripada cache dan bukannya meminta semula data ini daripada pangkalan data. Ini akan meningkatkan masa respons aplikasi kami dengan sangat baik.

3.2 Menyimpan hasil

Kita boleh menggunakan cache untuk menyimpan hasil yang diproses. Sebagai contoh, kadangkala kita perlu mengendalikan beberapa tugasan intensif pengiraan yang mengambil masa yang lama untuk diselesaikan. Dalam kes ini, kita boleh cache hasil ini untuk digunakan dalam permintaan serupa seterusnya. Berikut ialah contoh kod untuk melaksanakan contoh ini:

func main() {
  db.InitDB()
}

func fibonacci(w http.ResponseWriter, r *http.Request) {
  num, err := strconv.Atoi(r.URL.Query().Get("num"))
  if err != nil {
     http.Error(w, "Invalid Num", http.StatusBadRequest)
     return
  }

  var res int
  cacheData := Cache(fmt.Sprintf("fibonacci-%d", num), func() interface{} {
     res = fib(num)
     return res
  })
  response(w, r, http.StatusOK, cacheData)
}

func fib(n int) int {
  if n < 2 {
     return n
  }
  return fib(n-1) + fib(n-2)
}

Dalam kod di atas, kami menggunakan cache untuk menyimpan hasil jujukan Fibonacci. Apabila kami menerima permintaan, jika parameter permintaan berada dalam cache, kami akan terus mengembalikan data dalam cache. Jika tidak, kami mengira hasil jujukan Fibonacci dan menyimpan hasilnya dalam cache.

  1. Ringkasan

Dalam aplikasi pelayan Golang, caching boleh meningkatkan masa respons aplikasi dengan sangat baik. Dalam artikel ini, kami memperkenalkan dua jenis cache: cache tempatan dan cache teragih. Caching tempatan boleh digunakan untuk aplikasi satu contoh, manakala caching teragih sesuai untuk aplikasi berbilang contoh. Kami juga menyediakan beberapa contoh kod yang menunjukkan cara caching boleh digunakan di Golang untuk mengoptimumkan masa respons pelayan.

Atas ialah kandungan terperinci Amalan menggunakan cache untuk mempercepatkan kecekapan tindak balas pelayan di Golang.. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn