Go Redis Crud quickly example

Install dependencies and environment variable

Replace the values from database connection with yours.

#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


This content originally appeared on DEV Community and was authored by Luigi Escalante

Install dependencies and environment variable

Replace the values from database connection with yours.

#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

Manager Redis

Create a file to manage.go This will contain a method to get the connection with redis for instance in other modules and services.

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
}

Create Struct for manage the entity (customer) repository

Create a struct for manage the redis connection and Get all methods to interact with the redis entity (CRUD operations and queries)
With this struct, any time we need to access the entity (customer) data, we can instance and start to use it as a repository pattern.

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
}

Create Struct entity

On Customers entity add the tags for mapped with bun fields.
The redis:"-" make de relation with the fields to save on redis. If you want one file or the struct doenst save just dont add the tag.

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

CRUD methods

A method example to store, update or get information from the entity.
These methods are used from the CustomersRepo entity.
They received a customer entity with the information and depending on the operation return the result.

Save a new record

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

Get a record for 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
}

Update a new record

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

Delete a new record

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

Review the code example

Redis example for test it


This content originally appeared on DEV Community and was authored by Luigi Escalante


Print Share Comment Cite Upload Translate Updates
APA

Luigi Escalante | Sciencx (2024-08-17T19:46:38+00:00) Go Redis Crud quickly example. Retrieved from https://www.scien.cx/2024/08/17/go-redis-crud-quickly-example/

MLA
" » Go Redis Crud quickly example." Luigi Escalante | Sciencx - Saturday August 17, 2024, https://www.scien.cx/2024/08/17/go-redis-crud-quickly-example/
HARVARD
Luigi Escalante | Sciencx Saturday August 17, 2024 » Go Redis Crud quickly example., viewed ,<https://www.scien.cx/2024/08/17/go-redis-crud-quickly-example/>
VANCOUVER
Luigi Escalante | Sciencx - » Go Redis Crud quickly example. [Internet]. [Accessed ]. Available from: https://www.scien.cx/2024/08/17/go-redis-crud-quickly-example/
CHICAGO
" » Go Redis Crud quickly example." Luigi Escalante | Sciencx - Accessed . https://www.scien.cx/2024/08/17/go-redis-crud-quickly-example/
IEEE
" » Go Redis Crud quickly example." Luigi Escalante | Sciencx [Online]. Available: https://www.scien.cx/2024/08/17/go-redis-crud-quickly-example/. [Accessed: ]
rf:citation
» Go Redis Crud quickly example | Luigi Escalante | Sciencx | https://www.scien.cx/2024/08/17/go-redis-crud-quickly-example/ |

Please log in to upload a file.




There are no updates yet.
Click the Upload button above to add an update.

You must be logged in to translate posts. Please log in or register.