データベース接続の値を自分の値に置き換えます。
#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 }
Customers エンティティに、パン フィールドにマップされたタグを追加します。
redis:"-" は、redis に保存するフィールドとの関係を作成します。 1 つのファイルが必要な場合、または構造体が保存されない場合は、タグを追加しないでください。
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