Rumah > Artikel > pembangunan bahagian belakang > Pergi Redis Crud cepat contoh
Ganti nilai daripada sambungan pangkalan data dengan anda.
#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
Buat fail untuk manage.go Ini akan mengandungi kaedah untuk mendapatkan sambungan dengan redis misalnya dalam modul dan perkhidmatan lain.
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 }
Buat struct untuk mengurus sambungan redis dan Dapatkan semua kaedah untuk berinteraksi dengan entiti redis (operasi dan pertanyaan CRUD)
Dengan struct ini, bila-bila masa kita perlu mengakses data entiti (pelanggan), kita boleh contoh dan mula menggunakannya sebagai corak repositori.
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 }
Pada entiti Pelanggan tambahkan teg untuk dipetakan dengan medan bun.
Redis:"-" buat de relation dengan medan untuk menjimatkan redis. Jika anda mahu satu fail atau struct doenst save cuma jangan tambah tag.
type Customer struct { ID string `redis:"id"` Name string `redis:"name"` Email string `redis:"email"` Phone string `redis:"phone"` Age int `redis:"age"` }
Contoh kaedah untuk menyimpan, mengemas kini atau mendapatkan maklumat daripada entiti.
Kaedah ini digunakan daripada entiti CustomersRepo.
Mereka menerima entiti pelanggan dengan maklumat dan bergantung pada operasi mengembalikan hasilnya.
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 contoh untuk mengujinya
Atas ialah kandungan terperinci Pergi Redis Crud cepat contoh. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!