mirror of
https://github.com/tiennm99/keepalive.git
synced 2026-10-11 03:13:31 +00:00
refactor(adapter)!: drop the valkey adapter in favor of redis
Valkey speaks the Redis protocol, so the redis adapter (go-redis) already serves it. Dropping valkey-go removes a dependency and shrinks the stripped binary by about 9 MB. The redis adapter now also closes a client that failed to connect only once. BREAKING CHANGE: `adapter: valkey` is no longer accepted. Use `adapter: redis` with a redis:// or rediss:// URL instead of valkey:// or valkeys://. The namespace option now applies to these services.
This commit is contained in:
1 parent
77b9a9673b
commit
cbcee9ccd8
6 files changed
+15
-70
No files matched your search
+8
-5
@@ -20,6 +20,8 @@ func init() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// redisAdapter serves every RESP-compatible store: Redis, Valkey, Dragonfly,
|
||||||
|
// KeyDB, Garnet and their hosted variants.
|
||||||
type redisAdapter struct {
|
type redisAdapter struct {
|
||||||
client *redis.Client
|
client *redis.Client
|
||||||
url string
|
url string
|
||||||
@@ -31,15 +33,16 @@ func (a *redisAdapter) Connect(ctx context.Context) error {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
a.client = redis.NewClient(opt)
|
client := redis.NewClient(opt)
|
||||||
if err := a.client.Ping(ctx).Err(); err != nil {
|
if err := client.Ping(ctx).Err(); err != nil {
|
||||||
a.client.Close()
|
client.Close()
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
if err := a.client.SetNX(ctx, a.key, 0, 0).Err(); err != nil {
|
if err := client.SetNX(ctx, a.key, 0, 0).Err(); err != nil {
|
||||||
a.client.Close()
|
client.Close()
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
a.client = client
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,55 +0,0 @@
|
|||||||
package adapter
|
|
||||||
|
|
||||||
import (
|
|
||||||
"context"
|
|
||||||
|
|
||||||
"github.com/valkey-io/valkey-go"
|
|
||||||
)
|
|
||||||
|
|
||||||
func init() {
|
|
||||||
Registry["valkey"] = func(cfg Config) (Adapter, error) {
|
|
||||||
url, err := cfg.Required("url")
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
return &valkeyAdapter{
|
|
||||||
url: url,
|
|
||||||
key: cfg.Optional("counter_key", "counter"),
|
|
||||||
}, nil
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
type valkeyAdapter struct {
|
|
||||||
client valkey.Client
|
|
||||||
url string
|
|
||||||
key string
|
|
||||||
}
|
|
||||||
|
|
||||||
func (a *valkeyAdapter) Connect(ctx context.Context) error {
|
|
||||||
opt, err := valkey.ParseURL(a.url)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
client, err := valkey.NewClient(opt)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
a.client = client
|
|
||||||
if err := a.client.Do(ctx, a.client.B().Setnx().Key(a.key).Value("0").Build()).Error(); err != nil {
|
|
||||||
a.client.Close()
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (a *valkeyAdapter) Increment(ctx context.Context) (int64, error) {
|
|
||||||
return a.client.Do(ctx, a.client.B().Incr().Key(a.key).Build()).AsInt64()
|
|
||||||
}
|
|
||||||
|
|
||||||
func (a *valkeyAdapter) Close(_ context.Context) error {
|
|
||||||
if a.client == nil {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
a.client.Close()
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
+6
-2
@@ -9,12 +9,16 @@ services:
|
|||||||
url: redis://default@redis-a.example.com:6379
|
url: redis://default@redis-a.example.com:6379
|
||||||
namespace: keepalive
|
namespace: keepalive
|
||||||
|
|
||||||
- adapter: valkey
|
# Valkey, Dragonfly, KeyDB and other Redis-compatible stores use the redis
|
||||||
|
# adapter with a redis:// or rediss:// (TLS) URL.
|
||||||
|
- name: valkey-a
|
||||||
|
adapter: redis
|
||||||
# Example: this service overrides root interval and counter_key.
|
# Example: this service overrides root interval and counter_key.
|
||||||
interval: 30s
|
interval: 30s
|
||||||
counter_key: valkey-counter
|
counter_key: valkey-counter
|
||||||
config:
|
config:
|
||||||
url: valkey://default@valkey-a.example.com:6379
|
url: rediss://default@valkey-a.example.com:6379
|
||||||
|
namespace: keepalive
|
||||||
|
|
||||||
- adapter: postgresql
|
- adapter: postgresql
|
||||||
config:
|
config:
|
||||||
|
|||||||
+1
-1
@@ -33,7 +33,7 @@ func TestConfigExampleYMLParses(t *testing.T) {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatalf("loadConfigFile returned error: %v", err)
|
t.Fatalf("loadConfigFile returned error: %v", err)
|
||||||
}
|
}
|
||||||
wantAdapters := []string{"redis", "valkey", "postgresql", "mysql", "mongodb", "couchbase"}
|
wantAdapters := []string{"redis", "redis", "postgresql", "mysql", "mongodb", "couchbase"}
|
||||||
if len(services) != len(wantAdapters) {
|
if len(services) != len(wantAdapters) {
|
||||||
t.Fatalf("len(services) = %d, want %d", len(services), len(wantAdapters))
|
t.Fatalf("len(services) = %d, want %d", len(services), len(wantAdapters))
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -7,7 +7,6 @@ require (
|
|||||||
github.com/go-sql-driver/mysql v1.10.0
|
github.com/go-sql-driver/mysql v1.10.0
|
||||||
github.com/lib/pq v1.12.3
|
github.com/lib/pq v1.12.3
|
||||||
github.com/redis/go-redis/v9 v9.19.0
|
github.com/redis/go-redis/v9 v9.19.0
|
||||||
github.com/valkey-io/valkey-go v1.0.75
|
|
||||||
go.mongodb.org/mongo-driver/v2 v2.6.0
|
go.mongodb.org/mongo-driver/v2 v2.6.0
|
||||||
gopkg.in/yaml.v3 v3.0.1
|
gopkg.in/yaml.v3 v3.0.1
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -47,8 +47,6 @@ github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
|
|||||||
github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
|
github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
|
||||||
github.com/lib/pq v1.12.3 h1:tTWxr2YLKwIvK90ZXEw8GP7UFHtcbTtty8zsI+YjrfQ=
|
github.com/lib/pq v1.12.3 h1:tTWxr2YLKwIvK90ZXEw8GP7UFHtcbTtty8zsI+YjrfQ=
|
||||||
github.com/lib/pq v1.12.3/go.mod h1:/p+8NSbOcwzAEI7wiMXFlgydTwcgTr3OSKMsD2BitpA=
|
github.com/lib/pq v1.12.3/go.mod h1:/p+8NSbOcwzAEI7wiMXFlgydTwcgTr3OSKMsD2BitpA=
|
||||||
github.com/onsi/gomega v1.39.1 h1:1IJLAad4zjPn2PsnhH70V4DKRFlrCzGBNrNaru+Vf28=
|
|
||||||
github.com/onsi/gomega v1.39.1/go.mod h1:hL6yVALoTOxeWudERyfppUcZXjMwIMLnuSfruD2lcfg=
|
|
||||||
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
|
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
|
||||||
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
|
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
|
||||||
github.com/redis/go-redis/v9 v9.19.0 h1:XPVaaPSnG6RhYf7p+rmSa9zZfeVAnWsH5h3lxthOm/k=
|
github.com/redis/go-redis/v9 v9.19.0 h1:XPVaaPSnG6RhYf7p+rmSa9zZfeVAnWsH5h3lxthOm/k=
|
||||||
@@ -59,8 +57,6 @@ github.com/stretchr/objx v0.5.2 h1:xuMeJ0Sdp5ZMRXx/aWO6RZxdr3beISkG5/G/aIRr3pY=
|
|||||||
github.com/stretchr/objx v0.5.2/go.mod h1:FRsXN1f5AsAjCGJKqEizvkpNtU+EGNCLh3NxZ/8L+MA=
|
github.com/stretchr/objx v0.5.2/go.mod h1:FRsXN1f5AsAjCGJKqEizvkpNtU+EGNCLh3NxZ/8L+MA=
|
||||||
github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu7U=
|
github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu7U=
|
||||||
github.com/stretchr/testify v1.11.1/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U=
|
github.com/stretchr/testify v1.11.1/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U=
|
||||||
github.com/valkey-io/valkey-go v1.0.75 h1:cfq9DODW2ntuUgyHJmFWb4/p+xpLpQB1t5SQyWM9uJ4=
|
|
||||||
github.com/valkey-io/valkey-go v1.0.75/go.mod h1:6X581PhgfeMkJmyfjIsa2eFdq6dy3Qkkg9zwjM1p42M=
|
|
||||||
github.com/xdg-go/pbkdf2 v1.0.0 h1:Su7DPu48wXMwC3bs7MCNG+z4FhcyEuz5dlvchbq0B0c=
|
github.com/xdg-go/pbkdf2 v1.0.0 h1:Su7DPu48wXMwC3bs7MCNG+z4FhcyEuz5dlvchbq0B0c=
|
||||||
github.com/xdg-go/pbkdf2 v1.0.0/go.mod h1:jrpuAogTd400dnrH08LKmI/xc1MbPOebTwRqcT5RDeI=
|
github.com/xdg-go/pbkdf2 v1.0.0/go.mod h1:jrpuAogTd400dnrH08LKmI/xc1MbPOebTwRqcT5RDeI=
|
||||||
github.com/xdg-go/scram v1.2.0 h1:bYKF2AEwG5rqd1BumT4gAnvwU/M9nBp2pTSxeZw7Wvs=
|
github.com/xdg-go/scram v1.2.0 h1:bYKF2AEwG5rqd1BumT4gAnvwU/M9nBp2pTSxeZw7Wvs=
|
||||||
@@ -96,8 +92,6 @@ go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0=
|
|||||||
go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y=
|
go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y=
|
||||||
go.uber.org/zap v1.27.1 h1:08RqriUEv8+ArZRYSTXy1LeBScaMpVSTBhCeaZYfMYc=
|
go.uber.org/zap v1.27.1 h1:08RqriUEv8+ArZRYSTXy1LeBScaMpVSTBhCeaZYfMYc=
|
||||||
go.uber.org/zap v1.27.1/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E=
|
go.uber.org/zap v1.27.1/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E=
|
||||||
go.yaml.in/yaml/v3 v3.0.4 h1:tfq32ie2Jv2UxXFdLJdh3jXuOzWiL1fo0bu/FbuKpbc=
|
|
||||||
go.yaml.in/yaml/v3 v3.0.4/go.mod h1:DhzuOOF2ATzADvBadXxruRBLzYTpT36CKvDb3+aBEFg=
|
|
||||||
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
|
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
|
||||||
golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
|
golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
|
||||||
golang.org/x/crypto v0.54.0 h1:YLIA59K4fiNzHzjnZt2tUJQjQtUWfWbeHBqKtk3eScw=
|
golang.org/x/crypto v0.54.0 h1:YLIA59K4fiNzHzjnZt2tUJQjQtUWfWbeHBqKtk3eScw=
|
||||||
|
|||||||
Reference in new issue
Block a user