make redis more simple

dev
ajikamaludin 2 years ago
parent 38a2e3f750
commit 609ea4814c
Signed by: ajikamaludin
GPG Key ID: 476C9A2B4B794EBB

@ -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{

@ -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", &notes)
if err != nil {
fmt.Println("err", err)
}
err = json.Unmarshal([]byte(renotes), &notes)
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(&notes)
val, err := json.Marshal(&notes)
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", &notes, 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, &note)
if err != nil {
return err
}
db, err := gormdb.GetInstance()
note := models.Note{}
err = db.First(&note, 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(&note, id).Error
if err != nil {
return c.Status(fiber.StatusNotFound).JSON(fiber.Map{
"status": constants.STATUS_FAIL,
"message": "note not found",
})
}
redisclient.Set(key, &note, 30*time.Second)
}
return c.Status(fiber.StatusOK).JSON(fiber.Map{

@ -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()

@ -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
}

Loading…
Cancel
Save