From 609ea4814c6cecb816e7f43175f4daaa1e385c29 Mon Sep 17 00:00:00 2001 From: ajikamaludin Date: Thu, 21 Jul 2022 13:55:26 +0700 Subject: [PATCH] make redis more simple --- app/configs/configs.go | 2 +- app/handlers/note.handler.go | 63 ++++++++++---------------------- pkg/gorm.db/gorm.db.go | 2 +- pkg/redis.client/redis.client.go | 38 ++++++++++++++++++- 4 files changed, 58 insertions(+), 47 deletions(-) diff --git a/app/configs/configs.go b/app/configs/configs.go index 49630a7..ecc22ff 100644 --- a/app/configs/configs.go +++ b/app/configs/configs.go @@ -35,7 +35,7 @@ var lock = &sync.Mutex{} var configs *Configs func GetInstance() *Configs { - fmt.Println("configs", configs) + fmt.Println("[CONFIG] : ", &configs) if configs == nil { lock.Lock() configs = &Configs{ diff --git a/app/handlers/note.handler.go b/app/handlers/note.handler.go index 4c22421..00c5e8a 100644 --- a/app/handlers/note.handler.go +++ b/app/handlers/note.handler.go @@ -1,9 +1,6 @@ package handlers import ( - "context" - "encoding/json" - "fmt" "time" "github.com/ajikamaludin/go-fiber-rest/app/models" @@ -14,21 +11,11 @@ import ( "github.com/gofiber/fiber/v2" ) -// need to optimize -var ctx = context.Background() - func GetAllNotes(c *fiber.Ctx) error { var notes []models.Note - redis := redisclient.GetInstance() - renotes, err := redis.Get(ctx, "allnotes").Result() + err := redisclient.Get("allnotes", ¬es) if err != nil { - fmt.Println("err", err) - } - - err = json.Unmarshal([]byte(renotes), ¬es) - if err != nil { - fmt.Println("[GetAllNotes][REDIS]Empty Notes") db, err := gormdb.GetInstance() if err != nil { return c.Status(fiber.StatusInternalServerError).JSON(fiber.Map{ @@ -39,25 +26,7 @@ func GetAllNotes(c *fiber.Ctx) error { } db.Find(¬es) - val, err := json.Marshal(¬es) - if err != nil { - return c.Status(fiber.StatusInternalServerError).JSON(fiber.Map{ - "status": constants.STATUS_FAIL, - "message": "Internal Service Error", - "error": err.Error(), - }) - } - - err = redis.Set(ctx, "allnotes", string(val), 30*time.Second).Err() - if err != nil { - return c.Status(fiber.StatusInternalServerError).JSON(fiber.Map{ - "status": constants.STATUS_FAIL, - "message": "Internal Service Error", - "error": err.Error(), - }) - } - } else { - fmt.Println("[GetAllNotes][REDIS]Get Notes") + redisclient.Set("allnotes", ¬es, 30*time.Second) } return c.Status(fiber.StatusOK).JSON(fiber.Map{ @@ -69,21 +38,27 @@ func GetAllNotes(c *fiber.Ctx) error { func GetNoteById(c *fiber.Ctx) error { id := c.Params("id") + note := models.Note{} - db, err := gormdb.GetInstance() - + key := "note+" + id + err := redisclient.Get(key, ¬e) if err != nil { - return err - } + db, err := gormdb.GetInstance() - note := models.Note{} - err = db.First(¬e, id).Error + if err != nil { + return err + } - if err != nil { - return c.Status(fiber.StatusNotFound).JSON(fiber.Map{ - "status": constants.STATUS_FAIL, - "message": "note not found", - }) + err = db.First(¬e, id).Error + + if err != nil { + return c.Status(fiber.StatusNotFound).JSON(fiber.Map{ + "status": constants.STATUS_FAIL, + "message": "note not found", + }) + } + + redisclient.Set(key, ¬e, 30*time.Second) } return c.Status(fiber.StatusOK).JSON(fiber.Map{ diff --git a/pkg/gorm.db/gorm.db.go b/pkg/gorm.db/gorm.db.go index 39cb9ab..c77f2f0 100644 --- a/pkg/gorm.db/gorm.db.go +++ b/pkg/gorm.db/gorm.db.go @@ -14,7 +14,7 @@ var lock = &sync.Mutex{} var db *gorm.DB func GetInstance() (*gorm.DB, error) { - fmt.Println("db", db) + fmt.Println("[DATABASE] : ", db) if db == nil { configs := configs.GetInstance() diff --git a/pkg/redis.client/redis.client.go b/pkg/redis.client/redis.client.go index a276c7c..00991d9 100644 --- a/pkg/redis.client/redis.client.go +++ b/pkg/redis.client/redis.client.go @@ -1,8 +1,11 @@ package redisclient import ( + "context" + "encoding/json" "fmt" "sync" + "time" "github.com/ajikamaludin/go-fiber-rest/app/configs" "github.com/go-redis/redis/v8" @@ -10,9 +13,10 @@ import ( var lock = &sync.Mutex{} var rdb *redis.Client +var ctx = context.Background() func GetInstance() *redis.Client { - fmt.Println("redis client", rdb) + fmt.Println("[REDIS] : ", &rdb) if rdb == nil { configs := configs.GetInstance() addr := fmt.Sprintf("%s:%s", configs.Redisconfig.Host, configs.Redisconfig.Port) @@ -26,3 +30,35 @@ func GetInstance() *redis.Client { } return rdb } + +func Get(key string, model interface{}) error { + redis := GetInstance() + fmt.Println("[REDIS][READ] : ", key) + renotes, err := redis.Get(ctx, key).Result() + if err != nil { + return err + } + + err = json.Unmarshal([]byte(renotes), &model) + if err != nil { + return err + } + + return nil +} + +func Set(key string, model interface{}, expired time.Duration) error { + redis := GetInstance() + fmt.Println("[REDIS][WRITE] : ", key) + val, err := json.Marshal(&model) + if err != nil { + return err + } + + err = redis.Set(ctx, key, string(val), expired).Err() + if err != nil { + return err + } + + return nil +}