> 백엔드 개발 > Golang > Redis Crud로 빠르게 이동 예시

Redis Crud로 빠르게 이동 예시

WBOY
풀어 주다: 2024-08-18 06:45:41
원래의
936명이 탐색했습니다.

Go Redis Crud quickly example

종속성 및 환경 변수 설치

데이터베이스 연결의 값을 사용자의 값으로 바꾸세요.

#env file
REDIS_ADDRESS=localhost
REDIS_PORT=6379
REDIS_PASSWORD=123456
REDIS_DB=0

#install on go
go get github.com/redis/go-redis/v9
로그인 후 복사

관리자 Redis

manage.go에 파일을 생성합니다. 여기에는 다른 모듈 및 서비스 등에서 redis와 연결하는 방법이 포함됩니다.

package main

import (
    "fmt"
    "github.com/redis/go-redis/v9"
    "os"
    "strconv"
)

const CustomerDb = 0

type RedisManager struct {
    Db     int
    Client *redis.Client
}

func NewRedisClient(customerDb int) (*RedisManager, error) {
    address := os.Getenv("REDIS_ADDRESS")
    if address == "" {
        return nil, fmt.Errorf("REDIS_ADDRESS is not set")
    }
    password := os.Getenv("REDIS_PASSWORD")
    if password == "" {
        return nil, fmt.Errorf("REDIS_PASSWORD is not set")
    }
    port := os.Getenv("REDIS_PORT")
    if port == " " {
        return nil, fmt.Errorf("REDIS_PORT is not set")
    }
    db := os.Getenv("REDIS_DB")
    if db == "" {
        return nil, fmt.Errorf("REDIS_DB is not set")
    }
    redisDb, err := strconv.Atoi(db)
    if err != nil {
        return nil, fmt.Errorf("REDIS_DB is not a number")
    }
    cli := redis.NewClient(&redis.Options{
        Addr:     fmt.Sprintf("%s:%s", address, port),
        Password: password,
        DB:       redisDb,
    })
    return &RedisManager{
        Client: cli,
        Db:     customerDb,
    }, nil
}
func (rd *RedisManager) SetDb(db int) {
    rd.Db = db
}

로그인 후 복사

엔터티(고객) 저장소 관리를 위한 구조체 생성

redis 연결을 관리하기 위한 구조체를 만들고 redis 엔터티(CRUD 작업 및 쿼리)와 상호 작용하는 모든 메서드를 가져옵니다
이 구조를 사용하면 엔터티(고객) 데이터에 액세스해야 할 때마다 이를 인스턴스화하고 저장소 패턴으로 사용할 수 있습니다.

type CustomerRepo struct {
    Cli *RedisManager
    Db  int
}

func NewCustomerRepo() (*CustomerRepo, error) {
    cli, err := NewRedisClient(CustomerDb)
    if err != nil {
        return nil, err
    }
    return &CustomerRepo{
        Cli: cli,
    }, nil
}
로그인 후 복사

구조체 엔터티 만들기

Customer 엔터티에 bun 필드와 매핑되는 태그를 추가합니다.
redis:"-"는 redis에 저장할 필드와의 관계를 해제합니다. 하나의 파일을 원하거나 구조체를 저장하지 않으려면 태그를 추가하지 마세요.

type Customer struct {
    ID    string `redis:"id"`
    Name  string `redis:"name"`
    Email string `redis:"email"`
    Phone string `redis:"phone"`
    Age   int    `redis:"age"`
}
로그인 후 복사

CRUD 방법

엔티티로부터 정보를 저장, 업데이트 또는 가져오는 방법의 예
이러한 메서드는 CustomersRepo 엔터티에서 사용됩니다.
그들은 정보와 함께 고객 엔터티를 받았고 작업에 따라 결과를 반환했습니다.

새 기록을 저장하세요

func (c *CustomerRepo) Save(customer *Customer) error {
    return c.Cli.Client.HSet(context.TODO(), customer.ID, customer).Err()
}
로그인 후 복사

ID에 대한 기록 가져오기

func (c *CustomerRepo) Get(id string) (*Customer, error) {
    customer := &Customer{}
    resMap := c.Cli.Client.HGetAll(context.TODO(), id)
    if resMap.Err() != nil {
        return nil, resMap.Err()
    }
    if len(resMap.Val()) == 0 {
        return nil, nil
    }
    err := resMap.Scan(customer)
    if err != nil {
        return nil, err
    }
    return customer, nil
}
로그인 후 복사

새 기록 업데이트

func (c *CustomerRepo) Update(customer *Customer) error {
    return c.Cli.Client.HSet(context.TODO(), customer.ID, customer).Err()
}
로그인 후 복사

새 기록 삭제

func (c *CustomerRepo) Delete(id string) error {
    return c.Cli.Client.Del(context.TODO(), id).Err()
}
로그인 후 복사

코드 예제 검토

테스트용 Redis 예시

위 내용은 Redis Crud로 빠르게 이동 예시의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:dev.to
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿