Files

69 lines
1.2 KiB
Go
Raw Permalink Normal View History

package cache
import (
"context"
"encoding/json"
"time"
"github.com/go-redis/redis/v8"
)
type Cache struct {
client *redis.Client
ctx context.Context
}
func New(redisURL string) (*Cache, error) {
opt, err := redis.ParseURL(redisURL)
if err != nil {
return nil, err
}
client := redis.NewClient(opt)
ctx := context.Background()
// Test connection
if err := client.Ping(ctx).Err(); err != nil {
return nil, err
}
return &Cache{
client: client,
ctx: ctx,
}, nil
}
func (c *Cache) Get(key string) ([]byte, error) {
val, err := c.client.Get(c.ctx, key).Result()
if err == redis.Nil {
return nil, nil
}
if err != nil {
return nil, err
}
return []byte(val), nil
}
func (c *Cache) Set(key string, value []byte, ttl time.Duration) error {
return c.client.Set(c.ctx, key, value, ttl).Err()
}
func (c *Cache) Delete(key string) error {
return c.client.Del(c.ctx, key).Err()
}
func (c *Cache) InvalidatePattern(pattern string) error {
keys, err := c.client.Keys(c.ctx, pattern).Result()
if err != nil {
return err
}
if len(keys) > 0 {
return c.client.Del(c.ctx, keys...).Err()
}
return nil
}
func (c *Cache) Close() error {
return c.client.Close()
}