집 >데이터 베이스 >MySQL 튜토리얼 >MySQL을 사용하여 캐시된 데이터를 Go 언어로 저장
최근에는 데이터 처리량이 증가함에 따라 캐시에 대한 수요가 점점 더 높아지고 있습니다. 기존 캐시는 메모리 저장을 기반으로 하기 때문에 속도가 빠르지만 비용이 높다는 장점이 있습니다. 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 및expire_time의 3개 필드가 포함된 캐시_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의 세 가지 메서드가 포함된 캐시 구조를 구현했습니다. 그중 Set 메소드는 키-값 쌍을 MySQL 데이터베이스에 저장하는 데 사용되며 Get 메소드는 지정된 키의 값을 얻는 데 사용됩니다. NewCache 메소드는 Cache 구조를 초기화하는 데 사용됩니다. 이 예에서는 키 "key1"의 값을 "value1"로 설정하고 만료 시간을 10초로 지정한 다음 Get 메서드를 호출하여 키 "key1"의 값을 가져와 인쇄합니다.
프로그램을 실행하면 다음과 같은 출력을 볼 수 있습니다.
value1
이는 MySQL을 사용하여 캐시 저장소를 성공적으로 구현했음을 보여줍니다.
요약
이 기사에서는 MySQL을 사용하여 Go 언어로 캐시 데이터를 저장하는 방법을 소개합니다. 구체적인 단계에는 go-sql-driver/mysql 드라이버를 사용하여 MySQL 데이터베이스에 연결하고 데이터 저장을 위해 특별히 MySQL에 캐시를 만드는 것이 포함됩니다. 테이블, 캐시 스토리지 등 이 글의 소개를 통해 우리는 MySQL을 캐시 저장 방식으로 사용하는 것이 저비용, 고신뢰성의 장점이 있다는 것을 알 수 있으며, 매우 권장되는 실천 방법이다.
위 내용은 MySQL을 사용하여 캐시된 데이터를 Go 언어로 저장의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!