Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Pembangunan Golang: menggunakan Redis untuk melaksanakan pengurusan cache

Pembangunan Golang: menggunakan Redis untuk melaksanakan pengurusan cache

WBOY
WBOYasal
2023-09-20 09:55:491015semak imbas

Pembangunan Golang: menggunakan Redis untuk melaksanakan pengurusan cache

Pembangunan Golang: Menggunakan Redis untuk melaksanakan pengurusan cache memerlukan contoh kod khusus

Pengenalan:

Dalam pembangunan web moden, menggunakan cache boleh meningkatkan prestasi dan pengalaman pengguna tapak web atau aplikasi dengan sangat baik. Sebagai pangkalan data dalam memori berprestasi tinggi, Redis digunakan secara meluas dalam pengurusan cache. Artikel ini akan memperkenalkan cara menggunakan Golang dan Redis untuk melaksanakan pengurusan cache, dengan contoh kod khusus.

1. Apakah itu pengurusan cache?

Pengurusan cache merujuk kepada menyimpan data yang kerap diakses dalam memori capaian pantas untuk meningkatkan kelajuan bacaan data. Dalam pembangunan web, keputusan pertanyaan pangkalan data, hasil pengiraan atau data lain yang digunakan semula biasanya disimpan dalam cache untuk mengurangkan bilangan akses kepada pangkalan data atau sumber luaran lain, dengan itu meningkatkan prestasi aplikasi.

2. Kenapa pilih Redis?

Redis ialah pangkalan data dalam memori berprestasi tinggi sumber terbuka dengan ciri-ciri berikut:

  1. Pantas: Redis ialah pangkalan data berasaskan memori, data disimpan dalam memori dan mempunyai kelajuan membaca dan menulis yang sangat pantas.
  2. Ketersediaan tinggi: Redis menyokong replikasi tuan-hamba, dan berbilang tika Redis boleh dikonfigurasikan untuk meningkatkan ketersediaan sistem dan toleransi kesalahan.
  3. Jenis data yang kaya: Redis menyokong pelbagai struktur data, seperti rentetan, cincang, senarai, set, dll., membolehkan pembangun menyimpan dan memproses data dengan lebih mudah.

3. Bagaimana untuk menggunakan Redis untuk melaksanakan pengurusan cache?

Berikut ialah contoh untuk menggambarkan cara menggunakan Golang dan Redis untuk melaksanakan pengurusan cache.

Katakan kita mempunyai laman web e-dagang di mana pengguna boleh mencari produk berkaitan berdasarkan kata kunci produk. Untuk meningkatkan prestasi carian, kami boleh menyimpan hasil carian dalam Redis dan menetapkan masa tamat tempoh yang sesuai. Apabila pengguna melakukan carian yang sama, cache terlebih dahulu dicari dari Redis Jika cache wujud, hasilnya akan dikembalikan secara langsung.

Pertama, kita perlu memasang perpustakaan klien Golang untuk Redis, yang boleh dipasang menggunakan arahan berikut:

go get github.com/go-redis/redis/v8

Kemudian, buat fail bernama redis_cache.go dan tulis kod berikut:

package main

import (
    "encoding/json"
    "fmt"
    "github.com/go-redis/redis/v8"
    "time"
)

type Product struct {
    ID    int
    Name  string
    Price float64
}

func main() {
    // 创建Redis客户端
    client := redis.NewClient(&redis.Options{
        Addr: "localhost:6379",
    })

    // Ping测试连接
    pong, err := client.Ping().Result()
    if err != nil {
        fmt.Println("连接Redis失败:", err)
        return
    }
    fmt.Println("连接Redis成功:", pong)

    // 搜索关键字
    keyword := "手机"

    // 在Redis中查找缓存
    result, err := client.Get(keyword).Result()
    if err == redis.Nil {
        fmt.Println("缓存不存在")

        // 从数据库中查询数据
        products := searchFromDB(keyword)

        // 将查询结果存入Redis,并设置过期时间
        data, _ := json.Marshal(products)
        client.Set(keyword, data, 10*time.Minute)
        
        // 输出查询结果
        fmt.Println("从数据库中查询:", products)
    } else if err != nil {
        fmt.Println("获取缓存失败:", err)
    } else {
        fmt.Println("从缓存中读取:", result)

        // 解析缓存数据
        var products []Product
        json.Unmarshal([]byte(result), &products)

        // 输出查询结果
        fmt.Println("从缓存中读取:", products)
    }
}

func searchFromDB(keyword string) []Product {
    // 模拟从数据库中查询数据的过程
    products := []Product{
        {1, "iPhone 12", 5999.0},
        {2, "华为Mate 40", 4999.0},
        {3, "小米10", 3499.0},
    }
    return products
}

Logik utama kod di atas adalah seperti berikut:

  1. Cipta pelanggan Redis dan sambungkan ke perkhidmatan Redis tempatan.
  2. Lakukan ujian Ping untuk memastikan sambungan berjaya.
  3. Cari kata kunci.
  4. Cari cache daripada Redis, jika cache tidak wujud, tanya data daripada pangkalan data dan simpan hasilnya dalam cache Redis.
  5. Jika cache wujud, baca data terus dari cache.
  6. Hasil pertanyaan keluaran.

Seterusnya, kami menyusun dan menjalankan kod:

go build redis_cache.go
./redis_cache

# 输出结果:
# 连接Redis成功: PONG
# 缓存不存在
# 从数据库中查询: [{1 iPhone 12 5999} {2 华为Mate 40 4999} {3 小米10 3499}]

Anda dapat melihat bahawa apabila kami mencari kata kunci "telefon bimbit" buat kali pertama, cache tidak wujud, data ditanya daripada pangkalan data, dan keputusan disimpan dalam cache Redis. Cari kata kunci yang sama sekali lagi dan baca data terus dari cache Redis.

4. Ringkasan

Melalui contoh di atas, kami berjaya melaksanakan pengurusan cache menggunakan Golang dan Redis. Dalam pembangunan sebenar, kami boleh memilih strategi cache yang sesuai berdasarkan keperluan perniagaan tertentu, dan mengurus masa tamat tempoh cache dan strategi kemas kini secara munasabah untuk meningkatkan prestasi sistem dan pengalaman pengguna.

Dengan mempelajari cara menggunakan Golang dan Redis untuk melaksanakan pengurusan cache, saya percaya pembaca akan mempunyai pemahaman yang lebih mendalam tentang cara menggunakan teknologi caching dalam pembangunan web. Saya harap artikel ini akan membantu pembaca mempelajari dan menggunakan pengurusan cache.

Pautan rujukan:

  • Tapak web rasmi Redis: https://redis.io/
  • Perpustakaan pelanggan Go Redis: https://github.com/go-redis/redis

Atas ialah kandungan terperinci Pembangunan Golang: menggunakan Redis untuk melaksanakan pengurusan cache. 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