Rumah pembangunan bahagian belakang Golang Penyelesaian caching data perkhidmatan mikro berdasarkan bahasa Go

Penyelesaian caching data perkhidmatan mikro berdasarkan bahasa Go

Aug 08, 2023 am 10:13 AM
perkhidmatan mikro Cache data penyelesaian

Penyelesaian caching data perkhidmatan mikro berdasarkan bahasa Go

Penyelesaian cache data perkhidmatan mikro berdasarkan bahasa Go

Dengan populariti seni bina perkhidmatan mikro dan peningkatan dalam senario aplikasi, cache data telah menjadi cara penting untuk meningkatkan prestasi sistem dan kelajuan tindak balas. Dalam seni bina perkhidmatan mikro, data perlu kerap dikongsi antara perkhidmatan yang berbeza, dan cache data boleh mengurangkan akses kepada pangkalan data dan meningkatkan prestasi sistem dengan berkesan. Artikel ini akan memperkenalkan cara menggunakan bahasa Go untuk membina penyelesaian caching data perkhidmatan mikro berasaskan Redis dan menyediakan contoh kod.

Pertama, kita perlu memasang dan memulakan pelayan Redis. Anda boleh memuat turun pakej pemasangan dari laman web rasmi Redis dan memasang serta mengkonfigurasinya mengikut dokumentasi rasmi. Selepas memulakan pelayan Redis, anda boleh berinteraksi dengan Redis melalui alat baris perintah redis-cli Contohnya, laksanakan SET nilai kunci untuk menyimpan pasangan nilai kunci dalam Redis , laksanakan GET key boleh mendapatkan nilai yang sepadan. redis-cli命令行工具可以与Redis进行交互,例如执行SET key value可以将一个键值对存储到Redis中,执行GET key可以获取对应的值。

接下来,我们可以使用Go语言构建一个简单的微服务应用,以演示如何使用Redis来实现数据缓存。假设我们有两个微服务:User Service和Order Service,User Service负责处理与用户相关的操作,而Order Service负责处理与订单相关的操作。当Order Service需要获取用户信息时,可以通过User Service API获取,但由于频繁的查询会导致性能问题,我们可以使用Redis来缓存用户信息。

首先,我们需要导入Go语言的Redis客户端库,可以使用go-redis/redis库,可以通过go get命令安装,如下所示:

go get github.com/go-redis/redis/v8
Salin selepas log masuk

在User Service中,我们可以创建一个函数来从数据库获取用户信息。为了演示,我们可以用一个简单的GetUserByID函数来模拟实际的数据库查询过程,例如:

func GetUserByID(userID string) (*User, error) {
    // 模拟查询数据库
    user := &User{
        ID:   userID,
        Name: "John",
    }
    return user, nil
}
Salin selepas log masuk

接下来,我们可以定义一个全局的Redis客户端变量,在User Service启动时初始化该变量,如下所示:

var redisClient *redis.Client

func init() {
    // 初始化Redis客户端
    redisClient = redis.NewClient(&redis.Options{
        Addr: "localhost:6379",
    })
}
Salin selepas log masuk

然后,我们可以在GetUserByID函数中添加缓存逻辑,如下所示:

func GetUserByID(userID string) (*User, error) {
    user, err := getUserFromCache(userID)
    if err == nil {
        return user, nil
    }

    // 缓存未命中,从数据库获取用户信息
    user, err = getUserFromDB(userID)
    if err != nil {
        return nil, err
    }

    // 将用户信息存储到缓存
    err = setUserToCache(user)
    if err != nil {
        // 存储失败不影响正常流程,可以忽略
        log.Println("Failed to set user to cache:", err)
    }

    return user, nil
}
Salin selepas log masuk

在上述代码中,我们首先尝试从缓存中获取用户信息,如果缓存中不存在,则从数据库中获取。获取到用户信息后,我们将其存储到缓存中。

下面是实现缓存逻辑的具体函数:

func getUserFromCache(userID string) (*User, error) {
    // 使用userID作为缓存的键
    val, err := redisClient.Get(ctx, "user:"+userID).Result()
    if err == redis.Nil {
        // 缓存未命中
        return nil, fmt.Errorf("cache miss")
    } else if err != nil {
        return nil, err
    }

    // 解析缓存的值
    user := &User{}
    err = json.Unmarshal([]byte(val), user)
    if err != nil {
        return nil, err
    }

    return user, nil
}

func setUserToCache(user *User) error {
    // 将用户信息转换为JSON格式存储到缓存
    jsonStr, err := json.Marshal(user)
    if err != nil {
        return err
    }

    // 使用userID作为缓存的键,存储用户信息,并设置过期时间
    err = redisClient.Set(ctx, "user:"+user.ID, jsonStr, time.Hour).Err()
    if err != nil {
        return err
    }

    return nil
}
Salin selepas log masuk

在这里,我们使用userID作为缓存的键,通过Redis的GETSET命令实现缓存查询和存储。由于从Redis获取的数据是字符串类型,我们需要将其解析为User

Seterusnya, kita boleh menggunakan bahasa Go untuk membina aplikasi perkhidmatan mikro ringkas untuk menunjukkan cara menggunakan Redis untuk melaksanakan caching data. Katakan kami mempunyai dua perkhidmatan mikro: Perkhidmatan Pengguna dan Perkhidmatan Pengguna bertanggungjawab untuk memproses operasi berkaitan pengguna, dan Perkhidmatan Pesanan bertanggungjawab untuk memproses operasi berkaitan pesanan. Apabila Perkhidmatan Pesanan perlu mendapatkan maklumat pengguna, ia boleh mendapatkannya melalui API Perkhidmatan Pengguna Walau bagaimanapun, kerana pertanyaan yang kerap boleh menyebabkan masalah prestasi, kami boleh menggunakan Redis untuk menyimpan maklumat pengguna.

Pertama, kita perlu mengimport pustaka klien Redis bagi bahasa Go Anda boleh menggunakan pustaka go-redis/redis dan memasangnya melalui perintah go get, sebagai. ditunjukkan di bawah:

rrreee

Dalam Perkhidmatan Pengguna, kita boleh mencipta fungsi untuk mendapatkan maklumat pengguna daripada pangkalan data. Untuk demonstrasi, kita boleh menggunakan fungsi GetUserByID mudah untuk mensimulasikan proses pertanyaan pangkalan data sebenar, contohnya:

rrreee

Seterusnya, kita boleh menentukan pembolehubah klien Redis global apabila Perkhidmatan Pengguna bermula Mulakan pembolehubah sebagai berikut: 🎜rrreee🎜 Kemudian, kita boleh menambah logik caching dalam fungsi GetUserByID seperti berikut: 🎜rrreee🎜Dalam kod di atas, kami mula-mula cuba mendapatkan pengguna daripada cache Maklumat, jika tidak hadir dalam cache, diperoleh daripada pangkalan data. Selepas mendapatkan maklumat pengguna, kami menyimpannya dalam cache. 🎜🎜Berikut ialah fungsi khusus untuk melaksanakan logik caching: 🎜rrreee🎜Di sini, kami menggunakan userID sebagai kunci cache, melalui GET dan SET Redis. Perintah kod> melaksanakan pertanyaan cache dan storan. Memandangkan data yang diperoleh daripada Redis adalah daripada jenis rentetan, kita perlu menghuraikannya ke dalam struktur <code>User. 🎜🎜Melalui langkah di atas, kami berjaya membina penyelesaian caching data perkhidmatan mikro berasaskan Redis menggunakan bahasa Go. Dalam aplikasi sebenar, pengoptimuman prestasi selanjutnya boleh dilakukan berdasarkan keperluan, seperti menggunakan strategi penghapusan cache dan mekanisme pemantauan. Pada masa yang sama, anda juga boleh menggabungkan rangka kerja perkhidmatan mikro untuk merangkum logik caching ke dalam perisian tengah untuk meningkatkan kebolehgunaan semula dan kebolehselenggaraan kod. 🎜🎜Ringkasnya, bahasa Go menyediakan banyak perpustakaan dan alatan pihak ketiga, menjadikannya mudah dan cekap untuk membina cache data perkhidmatan mikro. Dengan storan memori dan ciri akses berkelajuan tinggi Redis, kami boleh meningkatkan prestasi sistem dan kelajuan tindak balas dengan berkesan. 🎜🎜 (Contoh kod di atas adalah untuk rujukan sahaja dan mungkin perlu dilaraskan mengikut keperluan khusus dalam aplikasi sebenar.) 🎜

Atas ialah kandungan terperinci Penyelesaian caching data perkhidmatan mikro berdasarkan bahasa Go. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
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

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
1 bulan yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
1 bulan yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Akan R.E.P.O. Ada Crossplay?
1 bulan yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Melaksanakan Algoritma Pembelajaran Mesin dalam C++: Cabaran dan Penyelesaian Biasa Melaksanakan Algoritma Pembelajaran Mesin dalam C++: Cabaran dan Penyelesaian Biasa Jun 03, 2024 pm 01:25 PM

Cabaran biasa yang dihadapi oleh algoritma pembelajaran mesin dalam C++ termasuk pengurusan memori, multi-threading, pengoptimuman prestasi dan kebolehselenggaraan. Penyelesaian termasuk menggunakan penunjuk pintar, perpustakaan benang moden, arahan SIMD dan perpustakaan pihak ketiga, serta mengikuti garis panduan gaya pengekodan dan menggunakan alat automasi. Kes praktikal menunjukkan cara menggunakan perpustakaan Eigen untuk melaksanakan algoritma regresi linear, mengurus memori dengan berkesan dan menggunakan operasi matriks berprestasi tinggi.

Rangka Kerja PHP dan Perkhidmatan Mikro: Penerapan dan Pengkontenaan Asli Awan Rangka Kerja PHP dan Perkhidmatan Mikro: Penerapan dan Pengkontenaan Asli Awan Jun 04, 2024 pm 12:48 PM

Faedah menggabungkan rangka kerja PHP dengan perkhidmatan mikro: Kebolehskalaan: Memanjangkan aplikasi dengan mudah, menambah ciri baharu atau mengendalikan lebih banyak beban. Fleksibiliti: Perkhidmatan mikro digunakan dan diselenggara secara bebas, menjadikannya lebih mudah untuk membuat perubahan dan kemas kini. Ketersediaan tinggi: Kegagalan satu perkhidmatan mikro tidak menjejaskan bahagian lain, memastikan ketersediaan yang lebih tinggi. Kes praktikal: Menggunakan perkhidmatan mikro menggunakan Laravel dan Kubernetes Langkah: Buat projek Laravel. Tentukan pengawal perkhidmatan mikro. Buat fail Docker. Buat manifes Kubernetes. Sebarkan perkhidmatan mikro. Uji perkhidmatan mikro.

Analisis dan penyelesaian kerentanan keselamatan rangka kerja Java Analisis dan penyelesaian kerentanan keselamatan rangka kerja Java Jun 04, 2024 pm 06:34 PM

Analisis kelemahan keselamatan rangka kerja Java menunjukkan bahawa XSS, suntikan SQL dan SSRF adalah kelemahan biasa. Penyelesaian termasuk: menggunakan versi rangka kerja keselamatan, pengesahan input, pengekodan output, mencegah suntikan SQL, menggunakan perlindungan CSRF, melumpuhkan ciri yang tidak perlu, menetapkan pengepala keselamatan. Dalam kes sebenar, kelemahan suntikan ApacheStruts2OGNL boleh diselesaikan dengan mengemas kini versi rangka kerja dan menggunakan alat semakan ekspresi OGNL.

Bagaimanakah rangka kerja Java menyokong penskalaan mendatar perkhidmatan mikro? Bagaimanakah rangka kerja Java menyokong penskalaan mendatar perkhidmatan mikro? Jun 04, 2024 pm 04:34 PM

Rangka kerja Java menyokong pengembangan mendatar perkhidmatan mikro Kaedah khusus termasuk: Spring Cloud menyediakan Ribbon dan Feign untuk pengimbangan beban sisi pelayan dan klien. NetflixOSS menyediakan Eureka dan Zuul untuk melaksanakan penemuan perkhidmatan, pengimbangan beban dan failover. Kubernetes memudahkan penskalaan mendatar dengan penskalaan automatik, pemeriksaan kesihatan dan mulakan semula automatik.

Cipta sistem teragih menggunakan rangka kerja perkhidmatan mikro Golang Cipta sistem teragih menggunakan rangka kerja perkhidmatan mikro Golang Jun 05, 2024 pm 06:36 PM

Cipta sistem teragih menggunakan rangka kerja mikro perkhidmatan Golang: Pasang Golang, pilih rangka kerja mikroperkhidmatan (seperti Gin), cipta perkhidmatan mikro Gin, tambah titik akhir untuk menggunakan perkhidmatan mikro, bina dan jalankan aplikasi, buat pesanan dan inventori perkhidmatan mikro, gunakan titik akhir untuk memproses pesanan dan inventori Gunakan sistem pemesejan seperti Kafka untuk menyambung perkhidmatan mikro Gunakan perpustakaan sarama untuk menghasilkan dan menggunakan maklumat pesanan

Apakah peranan yang dimainkan Spring Boot dalam seni bina perkhidmatan mikro? Apakah peranan yang dimainkan Spring Boot dalam seni bina perkhidmatan mikro? Jun 04, 2024 pm 02:34 PM

SpringBoot memainkan peranan penting dalam memudahkan pembangunan dan penggunaan dalam seni bina perkhidmatan mikro: menyediakan konfigurasi automatik berasaskan anotasi dan mengendalikan tugas konfigurasi biasa, seperti sambungan pangkalan data. Menyokong pengesahan kontrak API melalui ujian kontrak, mengurangkan perubahan yang merosakkan antara perkhidmatan. Mempunyai ciri sedia pengeluaran seperti pengumpulan metrik, pemantauan dan pemeriksaan kesihatan untuk memudahkan pengurusan perkhidmatan mikro dalam persekitaran pengeluaran.

Apakah cabaran dalam membina seni bina perkhidmatan mikro menggunakan rangka kerja Java? Apakah cabaran dalam membina seni bina perkhidmatan mikro menggunakan rangka kerja Java? Jun 02, 2024 pm 03:22 PM

Membina seni bina perkhidmatan mikro menggunakan rangka kerja Java melibatkan cabaran berikut: Komunikasi antara perkhidmatan: Pilih mekanisme komunikasi yang sesuai seperti REST API, HTTP, gRPC atau baris gilir mesej. Pengurusan data teragih: Kekalkan konsistensi data dan elakkan transaksi teragih. Penemuan dan pendaftaran perkhidmatan: Sepadukan mekanisme seperti SpringCloudEureka atau HashiCorpConsul. Pengurusan konfigurasi: Gunakan SpringCloudConfigServer atau HashiCorpVault untuk mengurus konfigurasi secara berpusat. Pemantauan dan pemerhatian: Integrasikan Prometheus dan Grafana untuk pemantauan penunjuk, dan gunakan SpringBootActuator untuk menyediakan penunjuk operasi.

Pemantauan seni bina perkhidmatan mikro dan membimbangkan dalam rangka kerja Java Pemantauan seni bina perkhidmatan mikro dan membimbangkan dalam rangka kerja Java Jun 02, 2024 pm 12:39 PM

Pemantauan dan amaran seni bina mikroperkhidmatan dalam rangka kerja Java Dalam seni bina perkhidmatan mikro, pemantauan dan amaran adalah penting untuk memastikan kesihatan sistem dan operasi yang boleh dipercayai. Artikel ini akan memperkenalkan cara menggunakan rangka kerja Java untuk melaksanakan pemantauan dan membimbangkan seni bina perkhidmatan mikro. Kes praktikal: Gunakan SpringBoot+Prometheus+Alertmanager1. Integrasikan Prometheus@ConfigurationpublicclassPrometheusConfig{@BeanpublicSpringBootMetricsCollectorsspringBootMetric.

See all articles