Dalam beberapa tahun kebelakangan ini, dengan peningkatan jumlah pemprosesan data, permintaan untuk cache telah menjadi lebih tinggi dan lebih tinggi. Cache tradisional adalah berdasarkan storan memori Kelebihan kaedah ini ialah ia pantas, tetapi kosnya tinggi. Pangkalan data MySQL ialah kaedah penyimpanan data kos sederhana dan sangat dipercayai, jadi banyak syarikat memilih untuk menggunakan MySQL untuk melaksanakan penyimpanan cache. Artikel ini akan memperkenalkan cara menggunakan MySQL untuk menyimpan data cache dalam bahasa Go.
1. Gunakan Go untuk mengendalikan pangkalan data MySQL
1 Pasang pemacu MySQL
Dalam bahasa Go, kita perlu menggunakan pemacu MySQL yang sepadan untuk melaksanakan operasi pangkalan data. Pemacu MySQL yang popular pada masa ini termasuk go-sql-driver/mysql, mysql/mysql-connector-go, gocraft/dbr, dsb. Di sini, kami memilih untuk menggunakan go-sql-driver/mysql sebagai contoh demonstrasi Jika anda menggunakan pemacu MySQL lain, ia tidak akan menjejaskan pelaksanaan langkah berikut. Pertama, kita perlu memasukkan arahan berikut dalam terminal:
go get github.com/go-sql-driver/mysql
Arahan ini akan memasang pemacu go-sql-driver/mysql.
2. Sambung ke pangkalan data MySQL
Seterusnya, kami akan melaksanakan program sambungan pangkalan data MySQL yang mudah. Dalam MySQL, anda perlu menggunakan nama pengguna dan kata laluan untuk log masuk, jadi anda perlu menyediakan nama pengguna dan kata laluan MySQL yang sepadan terlebih dahulu. Dalam contoh ini, kami menetapkan nama pengguna kepada root dan kata laluan kepada 123456. Kodnya adalah seperti berikut:
package main import ( "database/sql" "fmt" _ "github.com/go-sql-driver/mysql" ) const ( username = "root" password = "123456" hostname = "127.0.0.1" port = 3306 dbname = "test" ) func main() { dataSourceName := fmt.Sprintf("%s:%s@tcp(%s:%d)/%s", username, password, hostname, port, dbname) db, err := sql.Open("mysql", dataSourceName) if err != nil { panic(err) } defer db.Close() err = db.Ping() if err != nil { panic(err) } fmt.Println("Successfully connected to the database!") }
Nota: Sebelum menjalankan program, sila pastikan perkhidmatan MySQL dimulakan.
Selepas menjalankan program, anda boleh melihat output seperti berikut:
Successfully connected to the database!
Ini menunjukkan bahawa kami telah berjaya menyambung ke pangkalan data MySQL.
2. Gunakan MySQL untuk menyimpan data cache
Memandangkan MySQL ialah pangkalan data hubungan dan cache adalah berdasarkan storan pasangan nilai kunci, kita perlu menyimpannya dalam MySQL Cipta jadual khusus untuk menyimpan data cache. Dalam contoh ini, kami mencipta jadual bernama cache_data, yang mengandungi 3 medan: kunci, nilai dan expire_time. Antaranya, kunci dan nilai masing-masing mewakili kunci dan nilai yang sepadan, dan expire_time mewakili masa tamat tempoh data. Kodnya adalah seperti berikut:
CREATE TABLE `cache_data` ( `key` varchar(255) NOT NULL DEFAULT '', `value` longblob NOT NULL, `expire_time` int(11) NOT NULL DEFAULT '0', PRIMARY KEY (`key`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
Selepas pernyataan SQL di atas selesai, kami boleh mengendalikan pangkalan data MySQL dalam bahasa Go. Seterusnya, mari kita laksanakan contoh cache mudah. Kod tersebut adalah seperti berikut:
package main import ( "database/sql" "fmt" "time" _ "github.com/go-sql-driver/mysql" ) const ( username = "root" password = "123456" hostname = "127.0.0.1" port = 3306 dbname = "test" ) type Cache struct { db *sql.DB } func (c *Cache) Set(key string, value []byte, expireTime time.Duration) error { query := fmt.Sprintf("INSERT INTO cache_data (key, value, expire_time) VALUES ('%s', ?, %d) ON DUPLICATE KEY UPDATE value = ?", key, time.Now().Add(expireTime).Unix()) stmt, err := c.db.Prepare(query) if err != nil { return err } _, err = stmt.Exec(value, value) if err != nil { return err } return nil } func (c *Cache) Get(key string) ([]byte, error) { var value []byte query := fmt.Sprintf("SELECT value, expire_time FROM cache_data WHERE key = '%s'", key) err := c.db.QueryRow(query).Scan(&value) if err != nil { return nil, err } return value, nil } func NewCache() (*Cache, error) { dataSourceName := fmt.Sprintf("%s:%s@tcp(%s:%d)/%s", username, password, hostname, port, dbname) db, err := sql.Open("mysql", dataSourceName) if err != nil { return nil, err } err = db.Ping() if err != nil { return nil, err } cache := &Cache{ db: db, } return cache, nil } func main() { cache, err := NewCache() if err != nil { panic(err) } err = cache.Set("key1", []byte("value1"), time.Second*10) if err != nil { panic(err) } value, err := cache.Get("key1") if err != nil { panic(err) } fmt.Println(string(value)) }
Dalam kod di atas, kami melaksanakan struktur Cache, yang mengandungi tiga kaedah: Set, Get dan NewCache. Antaranya, kaedah Set digunakan untuk menyimpan pasangan nilai kunci ke dalam pangkalan data MySQL; kaedah Dapatkan digunakan untuk mendapatkan nilai kunci yang ditentukan kaedah NewCache digunakan untuk memulakan struktur Cache; Dalam contoh ini, kami menetapkan nilai kunci "kunci1" kepada "nilai1" dan menentukan masa tamat tempoh menjadi 10 saat Kemudian kami memanggil kaedah Dapatkan untuk mendapatkan nilai kunci "kunci1" dan mencetaknya.
Selepas menjalankan program, anda boleh melihat output seperti berikut:
value1
Ini menunjukkan bahawa kami telah berjaya melaksanakan storan cache menggunakan MySQL.
Ringkasan
Artikel ini memperkenalkan cara menggunakan MySQL untuk menyimpan data cache dalam bahasa Go. Langkah-langkah khusus termasuk menggunakan pemacu go-sql/mysql untuk menyambung ke pangkalan data MySQL Buat jadual yang digunakan khusus untuk menyimpan data cache untuk melaksanakan storan cache, dsb. Melalui pengenalan artikel ini, kita dapat melihat bahawa menggunakan MySQL sebagai kaedah penyimpanan cache mempunyai kelebihan kos rendah dan kebolehpercayaan yang tinggi, dan merupakan kaedah amalan yang sangat disyorkan.
Atas ialah kandungan terperinci Menggunakan MySQL untuk menyimpan data cache dalam bahasa Go. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!