Go와 함께 Redis 사용

8453 단어 redisvideogotutorial
다른 날에는 특정 사용 사례가 아니라 일반적으로 Redis를 go 프로그램에서 활용하는 것이 얼마나 어려운지 알아보고 있었습니다. 몇 가지 패키지의 도움으로 아주 간단합니다.

감을 잡기 위해 사용하기로 한 것은 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 인스턴스에서 데이터를 쓰고 읽을 수 있습니다. 연결 풀링과 같이 이 패키지와 관련하여 살펴볼 수 있는 몇 가지 고급 개념이 있습니다.

시간 내주셔서 감사합니다. 여기에서 제 다른 이동 기사와 제 .

좋은 웹페이지 즐겨찾기