dreamfactory_cmd/lego/sys/redis/options.go
2023-06-09 21:58:02 +08:00

137 lines
2.6 KiB
Go

package redis
import (
"time"
"go_dreamfactory/lego/sys/redis/core"
"go_dreamfactory/lego/utils/mapstructure"
)
type RedisType int8
const (
Redis_Single RedisType = iota
Redis_Cluster
)
type Option func(*Options)
type Options struct {
RedisType RedisType
Redis_Single_Addr string
Redis_Single_Password string
Redis_Single_DB int
Redis_Cluster_Addr []string
Redis_Cluster_Password string
TimeOut time.Duration
Codec core.ICodec
}
func SetRedisType(v RedisType) Option {
return func(o *Options) {
o.RedisType = v
}
}
///RedisUrl = "127.0.0.1:6379"
func SetRedis_Single_Addr(v string) Option {
return func(o *Options) {
o.Redis_Single_Addr = v
}
}
func SetRedis_Single_Password(v string) Option {
return func(o *Options) {
o.Redis_Single_Password = v
}
}
func SetRedis_Single_DB(v int) Option {
return func(o *Options) {
o.Redis_Single_DB = v
}
}
func SetRedis_Cluster_Addr(v []string) Option {
return func(o *Options) {
o.Redis_Cluster_Addr = v
}
}
func SetRedis_Cluster_Password(v string) Option {
return func(o *Options) {
o.Redis_Cluster_Password = v
}
}
func SetTimeOut(v time.Duration) Option {
return func(o *Options) {
o.TimeOut = v
}
}
func SetCodec(v core.ICodec) Option {
return func(o *Options) {
o.Codec = v
}
}
func newOptions(config map[string]interface{}, opts ...Option) Options {
options := Options{
Redis_Single_Addr: "127.0.0.1:6379",
Redis_Single_Password: "",
Redis_Single_DB: 1,
Redis_Cluster_Addr: []string{"127.0.0.1:6379"},
Redis_Cluster_Password: "",
TimeOut: time.Second * 3,
}
if config != nil {
mapstructure.Decode(config, &options)
}
for _, o := range opts {
o(&options)
}
return options
}
func newOptionsByOption(opts ...Option) Options {
options := Options{
Redis_Single_Addr: "127.0.0.1:6379",
Redis_Single_Password: "",
Redis_Single_DB: 1,
Redis_Cluster_Addr: []string{"127.0.0.1:6379"},
Redis_Cluster_Password: "",
TimeOut: time.Second * 3,
}
for _, o := range opts {
o(&options)
}
return options
}
type RMutexOption func(*RMutexOptions)
type RMutexOptions struct {
expiry int
delay time.Duration
}
func SetExpiry(v int) RMutexOption {
return func(o *RMutexOptions) {
o.expiry = v
}
}
func Setdelay(v time.Duration) RMutexOption {
return func(o *RMutexOptions) {
o.delay = v
}
}
func newRMutexOptions(opts ...RMutexOption) RMutexOptions {
opt := RMutexOptions{
expiry: 5,
delay: time.Millisecond * 50,
}
for _, o := range opts {
o(&opt)
}
return opt
}