commit c661caf3a7ce8b3f2ba2485e72758bb23247f7c1 Author: Yun Date: Wed Mar 13 15:07:00 2024 +0800 只实现了单机版连接 diff --git a/go.mod b/go.mod new file mode 100644 index 0000000..00c1c51 --- /dev/null +++ b/go.mod @@ -0,0 +1,10 @@ +module code.yun.ink/pkg/redisx + +go 1.20 + +require github.com/go-redis/redis/v8 v8.11.5 + +require ( + github.com/cespare/xxhash/v2 v2.1.2 // indirect + github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f // indirect +) diff --git a/go.sum b/go.sum new file mode 100644 index 0000000..7342ff8 --- /dev/null +++ b/go.sum @@ -0,0 +1,15 @@ +github.com/cespare/xxhash/v2 v2.1.2 h1:YRXhKfTDauu4ajMg1TPgFO5jnlC2HCbmLXMcTG5cbYE= +github.com/cespare/xxhash/v2 v2.1.2/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= +github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f h1:lO4WD4F/rVNCu3HqELle0jiPLLBs70cWOduZpkS1E78= +github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f/go.mod h1:cuUVRXasLTGF7a8hSLbxyZXjz+1KgoB3wDUb6vlszIc= +github.com/fsnotify/fsnotify v1.4.9 h1:hsms1Qyu0jgnwNXIxa+/V/PDsU6CfLf6CNO8H7IWoS4= +github.com/go-redis/redis/v8 v8.11.5 h1:AcZZR7igkdvfVmQTPnu9WE37LRrO/YrBH5zWyjDC0oI= +github.com/go-redis/redis/v8 v8.11.5/go.mod h1:gREzHqY1hg6oD9ngVRbLStwAWKhA0FEgq8Jd4h5lpwo= +github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE= +github.com/onsi/ginkgo v1.16.5 h1:8xi0RTUf59SOSfEtZMvwTvXYMzG4gV23XVHOZiXNtnE= +github.com/onsi/gomega v1.18.1 h1:M1GfJqGRrBrrGGsbxzV5dqM2U2ApXefZCQpkukxYRLE= +golang.org/x/net v0.0.0-20210428140749-89ef3d95e781 h1:DzZ89McO9/gWPsQXS/FVKAlG02ZjaQ6AlZRBimEYOd0= +golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e h1:fLOSk5Q00efkSvAm+4xcoXD+RRmLmmulPn5I3Y9F2EM= +golang.org/x/text v0.3.6 h1:aRYxNxv6iGQlyVaZmk6ZgYEDa+Jg18DxebPSrd6bg1M= +gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= +gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= diff --git a/options.go b/options.go new file mode 100644 index 0000000..77e4bd5 --- /dev/null +++ b/options.go @@ -0,0 +1,35 @@ +package redisx + +type redisOption struct { + addr string + password string + db int + poolSize int +} + +func defaultOptions() redisOption { + return redisOption{ + addr: "localhost:6379", + } +} + +type Option func(*redisOption) + +// 127.0.0.1:6379 +func SetAddress(addr string) Option { + return func(o *redisOption) { + o.addr = addr + } +} + +func SetPassword(password string) Option { + return func(o *redisOption) { + o.password = password + } +} + +func SetDb(db int) Option { + return func(o *redisOption) { + o.db = db + } +} diff --git a/redisx.go b/redisx.go new file mode 100644 index 0000000..b5e63ae --- /dev/null +++ b/redisx.go @@ -0,0 +1,56 @@ +package redisx + +import ( + "context" + + "github.com/go-redis/redis/v8" +) + +// PoolSize:连接池中的最大连接数。 +// MinIdleConns:连接池中的最少空闲连接数。 +// MaxConnAge:连接池中连接的最长寿命。 +// PoolTimeout:当所有连接都被使用时,客户端等待一个连接被释放到连接池的最长时间。 +// IdleTimeout:在连接池中保持空闲状态的最长时间,超过这个时间的空闲连接将被关闭。 +// IdleCheckFrequency:检查空闲连接的频率。 + +// 单机 +func NewRedis(opts ...Option) *redis.Client { + opt := defaultOptions() + for _, apply := range opts { + apply(&opt) + } + + client := redis.NewClient(&redis.Options{ + Addr: opt.addr, + Password: opt.password, // no password set + DB: opt.db, // use default DB + + // 连接池配置参数 + // PoolSize: 100, // 连接池最大连接数 + // MinIdleConns: 10, // 最小空闲连接数 + // MaxConnAge: 30 * time.Minute, // 连接最大寿命 + // PoolTimeout: 4 * time.Second, // 等待连接池连接的最长时间 + // IdleTimeout: 5 * time.Minute, // 空闲连接的生命周期 + // IdleCheckFrequency: 60 * time.Second, // 空闲连接检查频率 + }) + _, err := client.Ping(context.Background()).Result() + if err != nil { + panic(err) + } + return client +} + +// 集群 + +// 哨兵 +// client = redis.NewFailoverClient(&redis.FailoverOptions{ +// MasterName: "mymaster", +// SentinelAddrs: []string{"127.0.0.1:26379", "127.0.0.1:26380"}, +// Password: "", +// DB: 0, +// }) +// for { +// reply, err := client.Incr("pvcont").Result() +// fmt.Printf("reply=%v err=%v\n", reply, err) +// time.Sleep(1 * time.Second) +// } diff --git a/redisx_test.go b/redisx_test.go new file mode 100644 index 0000000..a2788ef --- /dev/null +++ b/redisx_test.go @@ -0,0 +1 @@ +package redisx_test