近年、データ処理量の増加に伴い、キャッシュの需要がますます高まっています。従来のキャッシュはメモリ ストレージに基づいており、この方法の利点は高速であることですが、コストが高いことです。 MySQL データベースは適度なコストで信頼性の高いデータ ストレージ方法であるため、多くの企業がキャッシュ ストレージの実装に MySQL の使用を選択しています。この記事では、MySQL を使用して Go 言語でキャッシュされたデータを保存する方法を紹介します。
1. Go を使用して MySQL データベースを操作します
1. MySQL ドライバーをインストールします
Go 言語では、データベース操作を実行するために対応する MySQL ドライバーを使用する必要があります。現在人気のある MySQL ドライバーには、go-sql-driver/mysql、mysql/mysql-connector-go、gocraft/dbr などがあります。ここでは、デモンストレーションの例として go-sql-driver/mysql を使用することを選択しますが、他の MySQL ドライバーを使用しても、以降の手順の実行には影響しません。まず、ターミナルに次のコマンドを入力する必要があります:
go get github.com/go-sql-driver/mysql
このコマンドは go-sql-driver/mysql ドライバーをインストールします。
2. MySQL データベースへの接続
以下では、簡単な MySQL データベース接続プログラムを実装します。 MySQLではログイン時にユーザー名とパスワードが必要となるため、対応するMySQLのユーザー名とパスワードを事前に用意しておく必要があります。この例では、ユーザー名を root 、パスワードを 123456 に設定します。コードは次のとおりです。
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!") }
注: プログラムを実行する前に、MySQL サービスが開始されていることを確認してください。
プログラムを実行すると、次のような出力が表示されます。
Successfully connected to the database!
これは、MySQL データベースに正常に接続したことを示しています。
2. MySQL を使用してキャッシュ データを保存する
MySQL はリレーショナル データベースであり、キャッシュはキーと値のペアのストレージに基づいているため、キャッシュを MySQL に保存する必要があります。保存専用のテーブルを作成します。キャッシュデータ。この例では、key、value、expired_time の 3 つのフィールドを含む、cache_data という名前のテーブルを作成しました。このうち、keyとvalueはそれぞれキーと対応する値を表し、expire_timeはデータの有効期限を表します。コードは次のとおりです。
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;
上記の SQL ステートメントが完了すると、Go 言語で MySQL データベースを操作できるようになります。次に、簡単なキャッシュの例を実装してみましょう。コードは次のとおりです。
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)) }
上記のコードでは、Set、Get、および NewCache の 3 つのメソッドを含む Cache 構造を実装します。このうち、Set メソッドはキーと値のペアを MySQL データベースに保存するために使用され、Get メソッドは指定されたキーの値を取得するために使用され、NewCache メソッドはキャッシュ構造を初期化するために使用されます。この例では、キー「key1」の値を「value1」に設定し、有効期限を 10 秒に指定し、Get メソッドを呼び出してキー「key1」の値を取得して出力します。
プログラムを実行すると、次のような出力が表示されます。
value1
これは、MySQL を使用してキャッシュ ストレージが正常に実装されたことを示しています。
概要
この記事では、MySQL を使用して Go 言語でキャッシュされたデータを保存する方法を紹介します。具体的な手順には、go-sql-driver/mysql ドライバーを使用して MySQL データベースに接続することが含まれます。 MySQLではキャッシュストレージなどを実装するため、キャッシュデータを格納する専用のテーブルを作成します。この記事の紹介を通じて、キャッシュ保存方法として MySQL を使用することは、低コストで信頼性が高いという利点があり、非常に推奨される実践方法であることがわかります。
以上がMySQL を使用してキャッシュされたデータを Go 言語で保存するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。