Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk menulis data ke cache menggunakan Golang?

Bagaimana untuk menulis data ke cache menggunakan Golang?

WBOY
WBOYasal
2024-06-01 13:21:571102semak imbas

Abstrak: Terdapat banyak cara untuk melaksanakan operasi cache menggunakan bahasa Go, termasuk: penyegerakan.Peta: Pemetaan selamat serentak terbina dalam, sesuai untuk cache berskala kecil. go-cache: Pustaka pihak ketiga yang menyediakan ciri yang lebih maju seperti pengusiran, tamat tempoh dan tamat masa. Dalam aplikasi praktikal, go-cache boleh digunakan untuk cache hasil pertanyaan pangkalan data, dengan itu meningkatkan prestasi aplikasi dan mengurangkan operasi pertanyaan pangkalan data.

如何使用 Golang 将数据写入缓存?

Tulis data ke cache menggunakan Golang

Dalam sistem teragih, caching ialah teknologi penting yang boleh meningkatkan prestasi aplikasi dengan ketara. Bahasa Golang menyediakan pelbagai pustaka untuk digunakan caching, termasuk jenis sync.Map terbina dalam dan pustaka pihak ketiga seperti github.com/patrickmn/go-cache kod>. <code>sync.Map 类型和第三方库,如 github.com/patrickmn/go-cache

使用 sync.Map

sync.Map 是 Golang 标准库中提供的一个并发安全映射。它可以用来存储键值对,并且可以同时从多个 goroutine 中访问。要使用 sync.Map 存储数据,请遵循以下步骤:

package main

import (
    "sync"
)

var cache = sync.Map{}

func main() {
    // 将 "key1" 映射到值 "value1"
    cache.Store("key1", "value1")

    // 检索映射到 "key1" 的值
    value, ok := cache.Load("key1")
    if !ok {
        // 如果键不存在,则返回 nil
        fmt.Println("Key not found")
        return
    }

    fmt.Println(value) // 输出:"value1"
}

使用 go-cache

go-cache 是一个功能更丰富的缓存库,它提供了一些高级功能,例如逐出、过期和超时。要使用 go-cache 存储数据,请遵循以下步骤:

package main

import (
    "github.com/patrickmn/go-cache"
    "time"
)

var cache = cache.New(5*time.Minute, 10*time.Minute)

func main() {
    // 将 "key1" 映射到值 "value1",并设置 5 分钟的超时
    cache.Set("key1", "value1", 5*time.Minute)

    // 检索映射到 "key1" 的值
    value, found := cache.Get("key1")
    if !found {
        // 如果键不存在,则返回 nil
        fmt.Println("Key not found")
        return
    }

    fmt.Println(value) // 输出:"value1"
}

实战案例

以下是一个使用 go-cache

Gunakan sync.Map

🎜🎜sync.Map ialah peta selamat serentak yang disediakan dalam pustaka standard Golang. Ia boleh digunakan untuk menyimpan pasangan nilai kunci dan boleh diakses daripada berbilang goroutine pada masa yang sama. Untuk menggunakan sync.Map untuk menyimpan data, ikuti langkah berikut: 🎜
package main

import (
    "database/sql"
    "fmt"
    "github.com/patrickmn/go-cache"
    "time"
)

var (
    db     *sql.DB
    cache  = cache.New(5*time.Minute, 10*time.Minute)
)

func main() {
    // 打开数据库连接
    db, err := sql.Open("mysql", "user:password@tcp(127.0.0.1:3306)/database")
    if err != nil {
        panic(err)
    }

    // 检索用户数据并缓存
    rows, err := db.Query("SELECT * FROM users")
    if err != nil {
        panic(err)
    }

    for rows.Next() {
        var id int
        var name string
        if err := rows.Scan(&id, &name); err != nil {
            panic(err)
        }

        cache.Set(fmt.Sprintf("user:%d", id), name, cache.NoExpiration)
    }

    // 从缓存中检索用户姓名
    name, found := cache.Get("user:1")
    if found {
        fmt.Println(name) // 输出:John Doe
    } else {
        fmt.Println("Key not found")
    }
}
🎜🎜Gunakan go-cache🎜🎜🎜go-cache ialah perpustakaan caching yang lebih kaya dengan ciri, Ia menyediakan ciri lanjutan seperti pengusiran, tamat tempoh dan tamat masa. Untuk menggunakan go-cache untuk menyimpan data, ikuti langkah berikut: 🎜rrreee🎜🎜Contoh Praktikal🎜🎜🎜Berikut ialah contoh penggunaan go-cache untuk cache pangkalan data dalam aplikasi web Contoh hasil pertanyaan: 🎜rrreee🎜Dengan memanfaatkan keupayaan caching Golang, anda boleh meningkatkan prestasi aplikasi anda dengan ketara dan mengurangkan pertanyaan kepada pangkalan data asas. 🎜

Atas ialah kandungan terperinci Bagaimana untuk menulis data ke cache menggunakan 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