Select Git revision
redis.go 4.33 KiB
package redis
import (
"context"
"encoding/json"
"fmt"
"math"
"strings"
"time"
"gitlab.com/uafrica/go-utils/errors"
"gitlab.com/uafrica/go-utils/logs"
"github.com/go-redis/redis_rate/v9"
"github.com/go-redis/redis/v8"
)
var ctx = context.Background()
type ClientWithHelpers struct {
Client *redis.Client
Available bool
}
func NewClient(addr string) *ClientWithHelpers {
return &ClientWithHelpers{
Client: redis.NewClient(&redis.Options{
MaxRetries: 1,
DialTimeout: time.Duration(1) * time.Second, //So max 2 second wait
Addr: addr,
Password: "", // no password set
DB: 0, // use default Db
}),
Available: true,
}
}
func (r ClientWithHelpers) IsConnected() bool {
return r.Client != nil && r.Available == true
}
func (r ClientWithHelpers) DeleteByKey(key string) error {
if !r.IsConnected() {
return errors.Errorf("REDIS disabled: cannot del key(%s)", key)
}
_, err := r.Client.Del(ctx, key).Result()
if err != nil {
return errors.Wrapf(err, "failed to del key(%s)", key)
}
return nil
}
func (r ClientWithHelpers) DeleteByKeyPattern(pattern string) {
if !r.IsConnected() {
return
}
iter := r.Client.Scan(ctx, 0, pattern, math.MaxInt64).Iterator()
for iter.Next(ctx) {
val := iter.Val()
err := r.Client.Del(ctx, val).Err()
if err != nil {
panic(err)
}
}
if err := iter.Err(); err != nil {
panic(err)
}
}