diff --git a/go.mod b/go.mod index ddc0bac5..814cb16f 100644 --- a/go.mod +++ b/go.mod @@ -3,6 +3,7 @@ module github.com/gofiber/storage go 1.14 require ( + github.com/bradfitz/gomemcache v0.0.0-20190913173617-a41fca850d0b github.com/go-redis/redis/v8 v8.3.3 github.com/gofiber/utils v0.1.0 github.com/lib/pq v1.8.0 diff --git a/go.sum b/go.sum index 40cfe4bd..d9681793 100644 --- a/go.sum +++ b/go.sum @@ -3,6 +3,8 @@ github.com/aws/aws-sdk-go v1.34.28 h1:sscPpn/Ns3i0F4HPEWAVcwdIRaZZCuL7llJ2/60yPI github.com/aws/aws-sdk-go v1.34.28/go.mod h1:H7NKnBqNVzoTJpGfLrQkkD+ytBA93eiDYi/+8rV9s48= github.com/aws/aws-sdk-go v1.35.19 h1:vdIqQnOIqTNtvnOdt9r3Bf/FiCJ7KV/7O2BIj4TPx2w= github.com/aws/aws-sdk-go v1.35.19/go.mod h1:tlPOdRjfxPBpNIwqDj61rmsnA85v9jc0Ps9+muhnW+k= +github.com/bradfitz/gomemcache v0.0.0-20190913173617-a41fca850d0b h1:L/QXpzIa3pOvUGt1D1lA5KjYhPBAN/3iWdP7xeFS9F0= +github.com/bradfitz/gomemcache v0.0.0-20190913173617-a41fca850d0b/go.mod h1:H0wQNHz2YrLsuXOZozoeDmnHXkNCRmMW0gwFWDfEZDA= github.com/cespare/xxhash/v2 v2.1.1 h1:6MnRN8NT7+YBpUIWxHtefFZOKTAPgGjpQSxqLNn0+qY= github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8= diff --git a/memcache/README.md b/memcache/README.md new file mode 100644 index 00000000..7558a24a --- /dev/null +++ b/memcache/README.md @@ -0,0 +1 @@ +# memcache diff --git a/memcache/config.go b/memcache/config.go new file mode 100644 index 00000000..483be7b0 --- /dev/null +++ b/memcache/config.go @@ -0,0 +1,60 @@ +package memcache + +import "time" + +// Config defines the config for storage. +type Config struct { + GCInterval time.Duration + + // Prefix key + KeyPrefix string + + // Server list + ServerList []string + + // The socket read/write timeout. + // + // Optional. Default is 100 * time.Millisecond + Timeout time.Duration + + // The maximum number of idle connections that will be maintained per address. + // + // Consider your expected traffic rates and latency carefully. This should + // be set to a number higher than your peak parallel requests. + // + // Optional. Default is 2 + MaxIdleConns int +} + +// ConfigDefault is the default config +var ConfigDefault = Config{ + GCInterval: 10 * time.Second, + Timeout: 100 * time.Millisecond, + MaxIdleConns: 2, +} + +// Helper function to set default values +func configDefault(config ...Config) Config { + // Return default config if nothing provided + if len(config) < 1 { + return ConfigDefault + } + + // Override default config + cfg := config[0] + + // Set default values + if len(cfg.ServerList) < 1 { + panic("ServerList must not be empty") + } + if int(cfg.GCInterval) == 0 { + cfg.GCInterval = ConfigDefault.GCInterval + } + if int(cfg.Timeout) == 0 { + cfg.Timeout = ConfigDefault.Timeout + } + if cfg.MaxIdleConns == 0 { + cfg.MaxIdleConns = ConfigDefault.MaxIdleConns + } + return cfg +} diff --git a/memcached/memcached.go b/memcache/memcache.go similarity index 78% rename from memcached/memcached.go rename to memcache/memcache.go index a8a8b138..540eedcd 100644 --- a/memcached/memcached.go +++ b/memcache/memcache.go @@ -1,21 +1,25 @@ -package memcached +package memcache -import "time" +import ( + "time" + + mc "github.com/bradfitz/gomemcache/memcache" +) // Storage interface that is implemented by storage providers type Storage struct { + db *mc.Client gcInterval time.Duration } // New creates a new storage func New(config ...Config) *Storage { // Set default config - cfg := ConfigDefault + cfg := configDefault(config...) - // Override config if provided - if len(config) > 0 { - cfg = configDefault(config[0]) - } + db := mc.New(cfg.ServerList...) + db.Timeout = cfg.Timeout + db.MaxIdleConns = cfg.MaxIdleConns // Create storage store := &Storage{ diff --git a/memcache/memcache_test.go b/memcache/memcache_test.go new file mode 100644 index 00000000..89883a21 --- /dev/null +++ b/memcache/memcache_test.go @@ -0,0 +1 @@ +package memcache diff --git a/memcached/README.md b/memcached/README.md deleted file mode 100644 index 42e907b8..00000000 --- a/memcached/README.md +++ /dev/null @@ -1 +0,0 @@ -# memcached diff --git a/memcached/config.go b/memcached/config.go deleted file mode 100644 index 5e6317f7..00000000 --- a/memcached/config.go +++ /dev/null @@ -1,30 +0,0 @@ -package memcached - -import "time" - -// Config defines the config for storage. -type Config struct { - GCInterval time.Duration -} - -// ConfigDefault is the default config -var ConfigDefault = Config{ - GCInterval: 10 * time.Second, -} - -// Helper function to set default values -func configDefault(config ...Config) Config { - // Return default config if nothing provided - if len(config) < 1 { - return ConfigDefault - } - - // Override default config - cfg := config[0] - - // Set default values - if int(cfg.GCInterval) == 0 { - cfg.GCInterval = ConfigDefault.GCInterval - } - return cfg -} diff --git a/memcached/memcached_test.go b/memcached/memcached_test.go deleted file mode 100644 index 69ea8796..00000000 --- a/memcached/memcached_test.go +++ /dev/null @@ -1 +0,0 @@ -package memcached