データベース接続の値を実際の値に置き換えます。
#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 エンティティに、bun フィールドにマップされたタグを追加します。
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 サンプル
以上がRedis Crud を簡単に実行する例の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。