Skip to content
Snippets Groups Projects
Select Git revision
  • 3533283f091c72cfe9ccfc2c3c8465f96584397b
  • main default protected
  • v1.298.0
  • v1.297.0
  • v1.296.0
  • v1.295.0
  • v1.294.0
  • v1.293.0
  • v1.292.0
  • v1.291.0
  • v1.290.0
  • v1.289.0
  • v1.288.0
  • v1.287.0
  • v1.286.0
  • v1.285.0
  • v1.284.0
  • v1.283.0
  • v1.282.0
  • v1.281.0
  • v1.280.0
  • v1.279.0
22 results

redis.go

Blame
  • 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)
    	}
    }