Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk menggunakan caching di Golang untuk mengurangkan beban pangkalan data?

Bagaimana untuk menggunakan caching di Golang untuk mengurangkan beban pangkalan data?

WBOY
WBOYasal
2023-06-21 09:44:07981semak imbas

Apabila melakukan pembangunan web, pangkalan data ialah salah satu kaedah penyimpanan data yang paling biasa digunakan. Walau bagaimanapun, operasi pangkalan data yang kerap boleh meningkatkan beban pelayan dan menjejaskan prestasi tapak web. Untuk mengurangkan beban pada pangkalan data, kita perlu menggunakan caching. Artikel ini akan memperkenalkan cara menggunakan teknologi caching di Golang untuk mengurangkan beban pada pangkalan data.

  1. Apakah itu cache?

Caching ialah teknologi yang menyimpan data dalam ingatan supaya ia boleh diakses dengan lebih pantas. Kaedah pelaksanaan cache biasa termasuk cache memori, cache fail, cache Redis, dll. Caching boleh mengurangkan bilangan akses kepada pangkalan data dan meningkatkan kelajuan tindak balas sistem.

  1. Bagaimana untuk menggunakan caching?

Di Golang, anda boleh menggunakan perpustakaan pihak ketiga untuk melaksanakan fungsi cache yang biasa digunakan termasuk memcached, Redis, dsb. Artikel ini menggunakan Redis sebagai contoh untuk memperkenalkan penggunaan cache.

2.1 Pasang Redis

Dalam sistem Ubuntu, anda boleh menggunakan arahan berikut untuk memasang Redis:

sudo apt-get update
sudo apt-get install redis-server

2.2 Pasang perpustakaan go-redis

go- redis ialah Pustaka pelanggan Redis untuk Golang. Anda boleh menggunakan arahan berikut untuk memasang:

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

2.3 Menyambung ke Redis

Di Golang, menyambung ke Redis memerlukan menggunakan fungsi yang disediakan oleh pustaka klien Redis. Anda boleh menggunakan kod berikut untuk menyambung ke Redis:

import (
    "context"
    "github.com/go-redis/redis/v8"
)

func main() {
    // 创建Redis客户端实例
    rdb := redis.NewClient(&redis.Options{
        Addr:     "localhost:6379",
        Password: "", //设置Redis密码
        DB:       0,  //使用默认的DB
    })

    // 测试连接
    err := rdb.Ping(context.Background()).Err()
    if err != nil {
        panic(err)
    }

    // 关闭连接
    defer rdb.Close()
}

2.4 Menggunakan cache

Di Golang, anda boleh menggunakan kaedah Get dan Set Redis untuk operasi caching. Berikut ialah contoh mudah yang membaca data daripada cache, dan jika ia tidak wujud dalam cache, membaca data daripada pangkalan data dan menyimpan data ke cache:

func GetUserInfoById(userId string) (*UserInfo, error) {
    var u *UserInfo

    // 从缓存中读取数据
    val, err := rdb.Get(context.Background(), fmt.Sprintf("user_info:%s", userId)).Result()
    if err == redis.Nil {
        // 数据不存在于缓存中,需要从数据库中读取
        u, err = db.QueryUserInfoById(userId)
        if err != nil {
            return nil, err
        }

        // 将数据保存到缓存中
        jsonBytes, _ := json.Marshal(u)
        err := rdb.Set(context.Background(), fmt.Sprintf("user_info:%s", userId), jsonBytes, time.Duration(30)*time.Minute).Err()
        if err != nil {
            log.Errorf("set user info to redis error: %v", err)
        }
    } else if err != nil {
        return nil, err
    } else {
        // 数据存在于缓存中,解析JSON
        err = json.Unmarshal([]byte(val), &u)
        if err != nil {
            return nil, err
        }
    }

    return u, nil
}

Dalam contoh di atas, pertama daripada cache Baca data daripada pangkalan data, dan jika ia tidak wujud dalam cache, baca data daripada pangkalan data dan simpan data ke cache. Dalam proses ini, kaedah Get dan Set Redis digunakan untuk melaksanakan operasi baca dan tulis cache.

  1. Langkah berjaga-jaga cache

Apabila menggunakan cache, terdapat beberapa perkara yang perlu diberi perhatian:

3.1 Ketekalan data

Sejak data dalam cache mungkin tidak segerak dengan data dalam pangkalan data, ketekalan data perlu dipertimbangkan semasa melakukan operasi baca dan tulis. Sebagai contoh, apabila mengemas kini data dalam pangkalan data, data dalam cache perlu dikemas kini pada masa yang sama apabila memadam data dalam pangkalan data, data dalam cache juga perlu dipadam pada masa yang sama;

3.2 Masa tamat cache

Memandangkan data yang disimpan dalam cache mungkin sudah lapuk, masa tamat cache perlu ditetapkan. Tetapan masa tamat tempoh perlu dilaraskan mengikut keperluan perniagaan untuk mengelakkan data yang disimpan dalam cache terlalu lama atau cache dikemas kini terlalu kerap.

3.3 Kemas kini data menyebabkan cache tidak sah

Apabila data dalam pangkalan data dikemas kini, data dalam cache perlu dikemas kini pada masa yang sama. Jika data dalam cache tidak dikemas kini dalam masa, kadar hit cache akan berkurangan, sekali gus menjejaskan prestasi sistem. Oleh itu, apabila melakukan operasi kemas kini pangkalan data, strategi kemas kini cache perlu dipertimbangkan.

  1. Ringkasan

Caching ialah salah satu teknologi penting untuk mengurangkan beban pangkalan data dan meningkatkan prestasi tapak web. Di Golang, fungsi caching boleh dilaksanakan dengan menggunakan perpustakaan pihak ketiga yang biasa digunakan termasuk memcached, Redis, dsb. Apabila menggunakan cache, anda perlu memberi perhatian kepada isu seperti ketekalan data, masa tamat tempoh cache dan ketidaksahihan cache yang disebabkan oleh kemas kini data. Dalam pembangunan sebenar, strategi caching perlu dipilih dan dikonfigurasikan mengikut keperluan perniagaan untuk mengoptimumkan prestasi sistem.

Atas ialah kandungan terperinci Bagaimana untuk menggunakan caching di Golang untuk mengurangkan beban pangkalan data?. 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