ホームページ >データベース >mysql チュートリアル >MySQL を使用してキャッシュされたデータを Go 言語で保存する

MySQL を使用してキャッシュされたデータを Go 言語で保存する

WBOY
WBOYオリジナル
2023-06-17 18:17:13937ブラウズ

近年、データ処理量の増加に伴い、キャッシュの需要がますます高まっています。従来のキャッシュはメモリ ストレージに基づいており、この方法の利点は高速であることですが、コストが高いことです。 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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。