Go와 함께 Redis 사용
감을 잡기 위해 사용하기로 한 것은 redigo라는 패키지this였습니다.
프로젝트 설정
프로젝트에서 초기화된 go 모듈이 없다면 계속 진행하십시오.
go mod init gitlab.com/dak425/golang-redis-example
모듈이 설정되면 redis 클라이언트 패키지를 가져와야 합니다.
go get github.com/gomodule/redigo
이제 우리는 모두 갈 준비가 되어 있어야 합니다.
Redis 인스턴스에 연결
먼저 Redis 인스턴스에 연결하겠습니다.
conn, err := redis.Dial("tcp", "localhost:6379")
if err != nil {
// Handle error
}
defer conn.Close()
Dial
함수를 사용하여 두 개의 인수를 전달하여 인스턴스에 연결합니다. 첫 번째는 사용할 프로토콜이고 두 번째는 연결하려는 redis 인스턴스의 주소입니다.물론 필요하다고 생각되는 오류를 처리하십시오.
또한
conn.Close()
에 대한 지연된 호출을 추가하여 프로그램이 완료될 때 연결이 정리되도록 합니다.Redis 명령 실행
값 설정
redigo 패키지는
HMSet
와 같은 특정 명령 기능을 제공하지 않습니다. Redis 명령을 빌드하고 보낼 수 있도록 하는 Do
라는 연결 개체에 대한 메서드를 제공합니다._, err = conn.Do(
"HMSET",
"podcast:1",
"title",
"Tech Over Tea",
"creator",
"Brodie Robertson",
"category",
"technology",
"membership_fee",
9.99,
)
if err != nil {
// Handle error
}
podcast:1
키를 사용하여 해시에 여러 필드를 설정하는 redis 명령을 작성 중입니다.Do
메서드는 회신과 오류를 반환합니다. 해당 키의 해시 필드를 설정하는 데 문제가 있는 경우에만 응답에 관심이 없었습니다.Tech Over Tea is an actual podcast done by a guy I've talked to named Brodie Robertson. He tries to mostly stay on tech centered subjects like Linux and crypto.
I went on it a few months ago, you can find the episode
He has his own channel where he showcases a bunch of neat little Linux programs and utilities. You can check it out
핵심 가치 읽기
이제 Redis 인스턴스에 항목이 있으므로 일부 데이터를 다시 읽어 보겠습니다.
먼저 방금 입력한 해시에서 단일 필드를 가져옵니다.
title, err := redis.String(conn.Do("HGET", "podcast:1", "title"))
if err != nil {
// handle error
}
우리는
Do
를 다시 사용하여 redis 명령을 빌드하고 전송하지만 String
라는 함수에 래핑되어 있음을 알 수 있습니다. redis 응답을 go 문자열로 변환하려고 시도하는 문자열은 무엇입니까? 그렇지 않은 경우 확인할 수 있는 오류를 반환합니다.다음으로 전체 해시를 모두 가져옵니다.
podcastHash, err := redis.StringMap(conn.Do("HGETALL", "podcast:1"))
if err != nil {
// handle error
}
우리는 StringMap이라는 다른 유형 변환 함수를 사용합니다. 이 함수는 성공하면 반복할 수 있는
map[string]string
를 반환합니다.이제 괜찮습니다. 하지만 정말 좋은 것이 무엇인지 아십니까? redis 응답을 우리가 정의한 구조체로 언마샬링할 수 있다면. 우리가 할 수 있다는 것이 밝혀졌습니다.
사용을 위해 여기에 정의된 팟캐스트가 있습니다.
type Podcast struct {
Title string `redis:"title"`
Creator string `redis:"creator"`
Category string `redis:"category"`
Fee float64 `redis:"membership_fee"`
}
구조체 속성에 태그를 지정했음을 알 수 있습니다. json 태그와 다르지 않은 이 태그는 특정 패키지에서 redis 응답을 구조의 속성으로 언마샬링하는 방법을 알기 위해 사용됩니다.
그렇다면 이 패키지를 사용하여 구조체에 응답을 어떻게 언마샬링합니까? 두 단계 프로세스입니다. 먼저 redigo 패키지의
Values
함수를 사용하여 회신을 []interface{}
로 변환합니다.values, err := redis.Values(conn.Do("HGETALL", "podcast:1"))
if err != nil {
// handle error
}
응답을 변환한 후 구조체의 인스턴스를 만들고 응답과 구조체 인스턴스에 대한 포인터를
ScanStruct
라는 함수에 전달합니다.var podcast Podcast
err = redis.ScanStruct(reply, &podcast)
if err != nil {
// handle error
}
오류가 발생하지 않았다고 가정하고
Printf
또는 기타 fmt
함수를 사용하여 구조체를 인쇄하면 이제 구조체에 해시의 값이 있는 것을 볼 수 있습니다!요약
이제 go 프로그램으로 Redis 인스턴스에서 데이터를 쓰고 읽을 수 있습니다. 연결 풀링과 같이 이 패키지와 관련하여 살펴볼 수 있는 몇 가지 고급 개념이 있습니다.
시간 내주셔서 감사합니다. 여기에서 제 다른 이동 기사와 제 .
Reference
이 문제에 관하여(Go와 함께 Redis 사용), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/dak425/utilizing-redis-with-golang-go-5a1h텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)