"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > Ejemplo de Go Redis Crud rápidamente

Ejemplo de Go Redis Crud rápidamente

Publicado el 2024-11-19
Navegar:725

Go Redis Crud quickly example

Instalar dependencias y variables de entorno.

Reemplace los valores de la conexión de la base de datos con los suyos.

#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

Gerente Redis

Cree un archivo para administrar.go. Este contendrá un método para obtener la conexión con redis, por ejemplo, en otros módulos y servicios.

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
}

Crear estructura para administrar el repositorio de la entidad (cliente)

Crear una estructura para administrar la conexión de Redis y obtener todos los métodos para interactuar con la entidad de Redis (operaciones y consultas CRUD)
Con esta estructura, cada vez que necesitemos acceder a los datos de la entidad (cliente), podemos crear una instancia y comenzar a usarlos como patrón de repositorio.

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
}

Crear entidad de estructura

En la entidad Clientes, agregue las etiquetas para los campos asignados con bollos.
El redis:"-" hace la relación con los campos para guardar en redis. Si desea que un archivo o la estructura no se guarde, simplemente no agregue la etiqueta.

type Customer struct {
    ID    string `redis:"id"`
    Name  string `redis:"name"`
    Email string `redis:"email"`
    Phone string `redis:"phone"`
    Age   int    `redis:"age"`
}

métodos CRUD

Un ejemplo de método para almacenar, actualizar u obtener información de la entidad.
Estos métodos se utilizan desde la entidad CustomersRepo.
Recibieron una entidad de cliente con la información y dependiendo de la operación devuelven el resultado.

Guardar un nuevo registro

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

Obtener un registro de identificación

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
}

Actualizar un nuevo registro

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

Eliminar un nuevo registro

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

Revisa el ejemplo de código

Ejemplo de Redis para probarlo

Declaración de liberación Este artículo se reproduce en: https://dev.to/luigiescalante/go-redis-crud-quickly-example-2agj?1 Si hay alguna infracción, comuníquese con [email protected] para eliminarla.
Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3