109 lines
2.5 KiB
Go
109 lines
2.5 KiB
Go
package database
|
||
|
||
import (
|
||
"context"
|
||
"github.com/redis/go-redis/v9"
|
||
config "goGin/config"
|
||
"log"
|
||
"time"
|
||
)
|
||
|
||
var RedisClient *redis.Client
|
||
var RedisOptions *redis.Options
|
||
var ctx = context.Background()
|
||
|
||
func ConnectRedis() {
|
||
redisURL := config.AppConfig.RedisUrl
|
||
if redisURL == "" {
|
||
log.Println("Warning: REDIS_URL is not set, continuing without Redis cache")
|
||
return
|
||
}
|
||
|
||
opt, err := redis.ParseURL(redisURL)
|
||
if err != nil {
|
||
log.Printf("Warning: Failed to parse Redis URL: %v, continuing without Redis cache", err)
|
||
RedisOptions = nil
|
||
return
|
||
}
|
||
|
||
RedisOptions = opt
|
||
RedisClient = redis.NewClient(opt)
|
||
|
||
// Test connection
|
||
_, err = RedisClient.Ping(ctx).Result()
|
||
if err != nil {
|
||
log.Printf("Warning: Failed to connect to Redis: %v, continuing without Redis cache", err)
|
||
RedisClient = nil
|
||
RedisOptions = nil
|
||
return
|
||
}
|
||
|
||
log.Println("Redis Bağlatısı Sağlandı")
|
||
}
|
||
|
||
// Set stores a key-value pair in Redis with expiration
|
||
func Set(key string, value interface{}, expiration time.Duration) error {
|
||
if RedisClient == nil {
|
||
return nil // Gracefully handle when Redis is not available
|
||
}
|
||
return RedisClient.Set(ctx, key, value, expiration).Err()
|
||
}
|
||
|
||
// Get retrieves a value from Redis
|
||
func Get(key string) (string, error) {
|
||
if RedisClient == nil {
|
||
return "", redis.Nil // Return Nil error when Redis is not available
|
||
}
|
||
return RedisClient.Get(ctx, key).Result()
|
||
}
|
||
|
||
// Delete removes a key from Redis
|
||
func Delete(key string) error {
|
||
if RedisClient == nil {
|
||
return nil
|
||
}
|
||
return RedisClient.Del(ctx, key).Err()
|
||
}
|
||
|
||
// Exists checks if a key exists in Redis
|
||
func Exists(key string) (bool, error) {
|
||
if RedisClient == nil {
|
||
return false, nil
|
||
}
|
||
count, err := RedisClient.Exists(ctx, key).Result()
|
||
return count > 0, err
|
||
}
|
||
|
||
// SetWithJSON stores a JSON-serializable value in Redis
|
||
func SetEx(key string, value interface{}, seconds int) error {
|
||
if RedisClient == nil {
|
||
return nil
|
||
}
|
||
return RedisClient.Set(ctx, key, value, time.Duration(seconds)*time.Second).Err()
|
||
}
|
||
|
||
// Increment increments a counter in Redis
|
||
func Increment(key string) (int64, error) {
|
||
if RedisClient == nil {
|
||
return 0, nil
|
||
}
|
||
return RedisClient.Incr(ctx, key).Result()
|
||
}
|
||
|
||
// Expire sets expiration time for a key
|
||
func Expire(key string, expiration time.Duration) error {
|
||
if RedisClient == nil {
|
||
return nil
|
||
}
|
||
return RedisClient.Expire(ctx, key, expiration).Err()
|
||
}
|
||
|
||
// FlushAll clears all keys in the current database
|
||
func FlushAll() error {
|
||
if RedisClient == nil {
|
||
return nil
|
||
}
|
||
log.Println("🧹 Clearing Redis Cache...")
|
||
return RedisClient.FlushDB(ctx).Err()
|
||
}
|