Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Pergi Redis Crud cepat contoh

Pergi Redis Crud cepat contoh

WBOY
WBOYasal
2024-08-18 06:45:41905semak imbas

Go Redis Crud quickly example

Pasang kebergantungan dan pembolehubah persekitaran

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

Pengurus Redis

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
}

Cipta Struct untuk mengurus repositori entiti (pelanggan).

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
}

Buat entiti Struct

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"`
}

kaedah CRUD

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.

Simpan rekod baharu

func (c *CustomerRepo) Save(customer *Customer) error {
    return c.Cli.Client.HSet(context.TODO(), customer.ID, customer).Err()
}

Dapatkan rekod untuk ID

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
}

Kemas kini rekod baharu

func (c *CustomerRepo) Update(customer *Customer) error {
    return c.Cli.Client.HSet(context.TODO(), customer.ID, customer).Err()
}

Padamkan rekod baharu

func (c *CustomerRepo) Delete(id string) error {
    return c.Cli.Client.Del(context.TODO(), id).Err()
}

Semak contoh kod

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel sebelumnya:Memahami terator GoArtikel seterusnya:Memahami terator Go