Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk membina sistem caching mudah di Golang

Bagaimana untuk membina sistem caching mudah di Golang

PHPz
PHPzasal
2023-04-03 11:50:00640semak imbas

Caching ialah teknik pengoptimuman prestasi biasa. Dalam sistem komputer moden, kami sering menyimpan data yang kerap digunakan dalam ingatan untuk capaian yang lebih pantas. Dalam aplikasi web, mekanisme caching boleh mengurangkan tekanan pada pangkalan data dan meningkatkan kelajuan tindak balas aplikasi.

Golang menyediakan mekanisme konkurensi yang sangat baik dan model pengurusan memori, jadi ia sangat sesuai untuk melaksanakan sistem caching berprestasi tinggi. Dalam artikel ini, kita akan belajar cara membina sistem caching mudah menggunakan Golang.

  1. Konsep Asas

Sistem caching paling mudah ialah menyimpan data dalam peta. Peta ialah salah satu struktur data terbina dalam yang paling penting di Golang, yang menyediakan operasi pertanyaan pantas. Kita boleh menganggap peta sebagai koleksi pasangan nilai kunci, yang kuncinya unik dan sepadan dengan setiap nilai.

Kita boleh menggunakan kod berikut untuk mencipta peta:

cache := make(map[string]string)

Seterusnya, kita boleh menambah data pada peta:

cache["key"] = "value"

Kemudian kita boleh Key query nilai:

val, ok := cache["key"]
if ok {
    fmt.Println(val)
}

Kita boleh menggunakan peta untuk melaksanakan sistem caching mudah untuk menyimpan data yang diambil daripada pangkalan data. Memandangkan pertanyaan pangkalan data mengambil masa yang tertentu, kita boleh mengelakkan pertanyaan pangkalan data berulang kali dengan menyimpan data dalam peta. Dengan cara ini, kami boleh menggunakan caching untuk meningkatkan prestasi aplikasi kami.

  1. Kaedah asas

Kita boleh menggunakan map dan mutex untuk melaksanakan sistem caching asas. Menggunakan mutex untuk melaksanakan kawalan konkurensi boleh mengelakkan masalah berbilang goroutine mengakses peta pada masa yang sama. Pelaksanaan khusus adalah seperti berikut:

type Cache struct {
    items map[string]string
    sync.Mutex
}

func (c *Cache) Set(key, val string) {
    c.Lock()
    defer c.Unlock()
    c.items[key] = val
}

func (c *Cache) Get(key string) (string, bool) {
    c.Lock()
    defer c.Unlock()
    val, ok := c.items[key]
    return val, ok
}

Dalam sistem cache ini, kami mentakrifkan struktur Cache untuk menyimpan semua item cache. item ialah peta yang digunakan untuk menyimpan item data. Kami juga mentakrifkan dua kaedah, Set dan Dapatkan, untuk menetapkan dan mendapatkan item cache masing-masing. Kedua-dua kaedah menggunakan mutex untuk memastikan keselamatan benang.

  1. Dasar Tamat Tempoh

Dalam aplikasi sebenar, kita biasanya perlu menentukan polisi tamat tempoh. Tanpa menggunakan dasar tamat tempoh, kami tidak boleh memadam item data tamat tempoh dalam cache secara kerap. Oleh itu, prestasi sistem caching terjejas secara negatif. Di Golang, kita boleh menggunakan jenis Masa dalam pakej masa untuk mengira masa tamat tempoh item cache.

Pertama, dalam struktur Cache, kita perlu menambah medan tamat tempoh untuk menentukan masa tamat tempoh setiap item cache:

type cacheItem struct {
    value    string
    expireAt time.Time
}

type Cache struct {
    items map[string]cacheItem
    sync.Mutex
}

Kemudian, dalam kaedah Dapatkan, kita perlu menyemak Sama ada item cache telah tamat tempoh. Jika tamat tempoh, kami perlu memadamkannya dan mengembalikan palsu:

func (c *Cache) Get(key string) (string, bool) {
    c.Lock()
    defer c.Unlock()
    item, ok := c.items[key]
    if !ok {
        return "", false
    }
    if item.expireAt.Before(time.Now()) {
        delete(c.items, key)
        return "", false
    }
    return item.value, true
}

Pada masa yang sama, kami juga perlu menambah kaedah untuk kerap membersihkan item cache yang telah tamat tempoh:

func (c *Cache) cleanUp() {
    for {
        time.Sleep(time.Minute)
        c.Lock()
        for key, item := range c.items {
            if item.expireAt.Before(time.Now()) {
                delete(c.items, key)
            }
        }
        c.Unlock()
    }
}

Kaedah ini Gunakan Tidur untuk menyemak secara berkala sama ada item cache telah tamat tempoh dan memadam item cache tamat tempoh.

  1. Ringkasan

Dalam artikel ini, kami mempelajari cara membina sistem caching mudah menggunakan Golang. Kami menggunakan peta dan mutex untuk melaksanakan penyimpanan data dan kawalan konkurensi, dan menggunakan jenis Masa dalam pakej masa untuk menentukan masa tamat tempoh. Dengan melaksanakan pembersihan tetap item cache yang telah tamat tempoh dalam kaedah Dapatkan, kami mengelakkan masalah kemerosotan prestasi sistem cache. Sistem caching mudah ini boleh dilanjutkan untuk meningkatkan prestasi aplikasi dan kebolehskalaan.

Atas ialah kandungan terperinci Bagaimana untuk membina sistem caching mudah 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