將資料庫連線中的值替換為您的值。
#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
建立一個檔案來管理.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 }
在客戶實體上新增與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"` }
儲存、更新或從實體取得資訊的方法範例。
這些方法是從 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