func NewClusterMQueue(props ClusterProps) (*MQueue, error) {
	logger := props.Logger.ForClass("mqueue/redis", "MQueue")
	c := redis.NewClusterClient(&redis.ClusterOptions{
		Addrs: props.Addrs,
	})
	return &MQueue{
		client:  c,
		logger:  logger,
		tracker: stats.NewMethodTracker(insert, retrieve, discard, next, remove, exists),
	}, nil
}
NewClusterMQueue creates a new instance of a redis client
ready to be used against a redis cluster
package redis
import (
	"context"
	"encoding/json"
	"github.com/go-redis/redis"
	"github.com/oasislabs/oasis-gateway/log"
	"github.com/oasislabs/oasis-gateway/mqueue/core"
	"github.com/oasislabs/oasis-gateway/stats"
)
const (
	insert   string = "insert"
	retrieve string = "retrieve"
	discard  string = "discard"
	next     string = "next"
	remove   string = "remove"
	exists   string = "exists"
)
type Client interface {
	Eval(script string, keys []string, args ...interface{}) *redis.Cmd
	Exists(key ...string) *redis.IntCmd
}
type Props struct {
	Context context.Context
	Logger  log.Logger
}
type ClusterProps struct {
	Props
	Addrs []string
}
type SingleInstanceProps struct {
	Props
	Addr string
}
type MQueue struct {
	client  Client
	logger  log.Logger
	tracker *stats.MethodTracker
}