데이터베이스 연결의 값을 사용자의 값으로 바꾸세요.
#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
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 }
고객 엔터티에 롤빵 필드와 매핑된 태그를 추가합니다.
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"` }
엔티티로부터 정보를 저장, 업데이트 또는 가져오는 방법의 예입니다.
이러한 메서드는 CustomersRepo 엔터티에서 사용됩니다.
그들은 정보와 함께 고객 엔터티를 받았고 작업에 따라 결과를 반환했습니다.
func (c *CustomerRepo) Save(customer *Customer) error { return c.Cli.Client.HSet(context.TODO(), customer.ID, customer).Err() }
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 예시
부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.
Copyright© 2022 湘ICP备2022001581号-3