no more memcache, go broke for mac 18.1
parent
9914252040
commit
cb219e269d
4
db.go
4
db.go
|
|
@ -52,10 +52,6 @@ func New(key Type, params ...string) (db DB, err error) {
|
||||||
db, err = NewCache(params...)
|
db, err = NewCache(params...)
|
||||||
case LEVELDB:
|
case LEVELDB:
|
||||||
db, err = NewLevelDB(params[0])
|
db, err = NewLevelDB(params[0])
|
||||||
case MEMCACHE:
|
|
||||||
db, err = NewMemcache(params[0], params[1:]...)
|
|
||||||
case MEMCACHECLUSTER:
|
|
||||||
db, err = NewMemcacheCluster(params[0], params[1:]...)
|
|
||||||
case MONGO:
|
case MONGO:
|
||||||
db, err = NewMongo(params[0], params[1:]...)
|
db, err = NewMongo(params[0], params[1:]...)
|
||||||
}
|
}
|
||||||
|
|
|
||||||
28
db_test.go
28
db_test.go
|
|
@ -146,26 +146,6 @@ func TestImplementations(t *testing.T) {
|
||||||
t.Log("$MONGO not set. Skipping")
|
t.Log("$MONGO not set. Skipping")
|
||||||
}
|
}
|
||||||
|
|
||||||
if _, ok := os.LookupEnv("MEMCACHED"); ok {
|
|
||||||
if memcache, err := NewMemcache("localhost:11211"); err != nil {
|
|
||||||
t.Logf("cannot make memcache: %v", err)
|
|
||||||
} else {
|
|
||||||
cases = append(cases, memcache)
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
t.Log("$MEMCACHED not set. Skipping")
|
|
||||||
}
|
|
||||||
|
|
||||||
if _, ok := os.LookupEnv("MEMCACHEDCLUSTER"); ok {
|
|
||||||
if memcacheCluster, err := NewMemcacheCluster("localhost:11211"); err != nil {
|
|
||||||
t.Logf("cannot make memcacheCluster: %v", err)
|
|
||||||
} else {
|
|
||||||
cases = append(cases, memcacheCluster)
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
t.Log("$MEMCACHEDCLUSTER not set. Skipping")
|
|
||||||
}
|
|
||||||
|
|
||||||
if _, ok := os.LookupEnv("MINIO"); ok {
|
if _, ok := os.LookupEnv("MINIO"); ok {
|
||||||
if minio, err := minio.NewMinio("localhost:9000", "accesskey", "secretkey"); err != nil {
|
if minio, err := minio.NewMinio("localhost:9000", "accesskey", "secretkey"); err != nil {
|
||||||
t.Logf("cannot make minio: %v", err)
|
t.Logf("cannot make minio: %v", err)
|
||||||
|
|
@ -281,14 +261,6 @@ func TestToFromString(t *testing.T) {
|
||||||
key: "leveldb",
|
key: "leveldb",
|
||||||
t: LEVELDB,
|
t: LEVELDB,
|
||||||
},
|
},
|
||||||
{
|
|
||||||
key: "memcache",
|
|
||||||
t: MEMCACHE,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
key: "memcachecluster",
|
|
||||||
t: MEMCACHECLUSTER,
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
key: "mongo",
|
key: "mongo",
|
||||||
t: MONGO,
|
t: MONGO,
|
||||||
|
|
|
||||||
6
go.mod
6
go.mod
|
|
@ -4,9 +4,6 @@ go 1.16
|
||||||
|
|
||||||
require (
|
require (
|
||||||
github.com/boltdb/bolt v1.3.1
|
github.com/boltdb/bolt v1.3.1
|
||||||
github.com/bradfitz/gomemcache v0.0.0-20190913173617-a41fca850d0b
|
|
||||||
github.com/buraksezer/consistent v0.9.0
|
|
||||||
github.com/cespare/xxhash v1.1.0
|
|
||||||
github.com/gomodule/redigo v1.8.5
|
github.com/gomodule/redigo v1.8.5
|
||||||
github.com/google/uuid v1.3.0
|
github.com/google/uuid v1.3.0
|
||||||
github.com/minio/minio-go/v6 v6.0.57
|
github.com/minio/minio-go/v6 v6.0.57
|
||||||
|
|
@ -14,7 +11,8 @@ require (
|
||||||
github.com/patrickmn/go-cache v2.1.0+incompatible
|
github.com/patrickmn/go-cache v2.1.0+incompatible
|
||||||
github.com/syndtr/goleveldb v1.0.0
|
github.com/syndtr/goleveldb v1.0.0
|
||||||
go.mongodb.org/mongo-driver v1.7.2
|
go.mongodb.org/mongo-driver v1.7.2
|
||||||
gopkg.in/yaml.v2 v2.2.8 // indirect
|
golang.org/x/sys v0.0.0-20220503163025-988cb79eb6c6 // indirect
|
||||||
|
gopkg.in/yaml.v2 v2.2.8
|
||||||
local/logb v0.0.0-00010101000000-000000000000
|
local/logb v0.0.0-00010101000000-000000000000
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
|
||||||
15
go.sum
15
go.sum
|
|
@ -5,8 +5,6 @@ github.com/Azure/azure-pipeline-go v0.1.8/go.mod h1:XA1kFWRVhSK+KNFiOhfv83Fv8L9a
|
||||||
github.com/Azure/azure-storage-blob-go v0.0.0-20181023070848-cf01652132cc/go.mod h1:oGfmITT1V6x//CswqY2gtAHND+xIP64/qL7a5QJix0Y=
|
github.com/Azure/azure-storage-blob-go v0.0.0-20181023070848-cf01652132cc/go.mod h1:oGfmITT1V6x//CswqY2gtAHND+xIP64/qL7a5QJix0Y=
|
||||||
github.com/Azure/go-ansiterm v0.0.0-20170929234023-d6e3b3328b78/go.mod h1:LmzpDX56iTiv29bbRTIsUNlaFfuhWRQBWjQdVyAevI8=
|
github.com/Azure/go-ansiterm v0.0.0-20170929234023-d6e3b3328b78/go.mod h1:LmzpDX56iTiv29bbRTIsUNlaFfuhWRQBWjQdVyAevI8=
|
||||||
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
|
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
|
||||||
github.com/OneOfOne/xxhash v1.2.2 h1:KMrpdQIwFcEqXDklaen+P1axHaj9BSKzvpUUfnHldSE=
|
|
||||||
github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU=
|
|
||||||
github.com/Unknwon/goconfig v0.0.0-20181105214110-56bd8ab18619 h1:6X8iB881g299aNEv6KXrcjL31iLOH7yA6NXoQX+MbDg=
|
github.com/Unknwon/goconfig v0.0.0-20181105214110-56bd8ab18619 h1:6X8iB881g299aNEv6KXrcjL31iLOH7yA6NXoQX+MbDg=
|
||||||
github.com/Unknwon/goconfig v0.0.0-20181105214110-56bd8ab18619/go.mod h1:wngxua9XCNjvHjDiTiV26DaKDT+0c63QR6H5hjVUUxw=
|
github.com/Unknwon/goconfig v0.0.0-20181105214110-56bd8ab18619/go.mod h1:wngxua9XCNjvHjDiTiV26DaKDT+0c63QR6H5hjVUUxw=
|
||||||
github.com/a8m/tree v0.0.0-20180321023834-3cf936ce15d6/go.mod h1:FSdwKX97koS5efgm8WevNf7XS3PqtyFkKDDXrz778cg=
|
github.com/a8m/tree v0.0.0-20180321023834-3cf936ce15d6/go.mod h1:FSdwKX97koS5efgm8WevNf7XS3PqtyFkKDDXrz778cg=
|
||||||
|
|
@ -18,12 +16,6 @@ github.com/aws/aws-sdk-go v1.15.81/go.mod h1:E3/ieXAlvM0XWO57iftYVDLLvQ824smPP3A
|
||||||
github.com/billziss-gh/cgofuse v1.1.0/go.mod h1:LJjoaUojlVjgo5GQoEJTcJNqZJeRU0nCR84CyxKt2YM=
|
github.com/billziss-gh/cgofuse v1.1.0/go.mod h1:LJjoaUojlVjgo5GQoEJTcJNqZJeRU0nCR84CyxKt2YM=
|
||||||
github.com/boltdb/bolt v1.3.1 h1:JQmyP4ZBrce+ZQu0dY660FMfatumYDLun9hBCUVIkF4=
|
github.com/boltdb/bolt v1.3.1 h1:JQmyP4ZBrce+ZQu0dY660FMfatumYDLun9hBCUVIkF4=
|
||||||
github.com/boltdb/bolt v1.3.1/go.mod h1:clJnj/oiGkjum5o1McbSZDSLxVThjynRyGBgiAx27Ps=
|
github.com/boltdb/bolt v1.3.1/go.mod h1:clJnj/oiGkjum5o1McbSZDSLxVThjynRyGBgiAx27Ps=
|
||||||
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/buraksezer/consistent v0.9.0 h1:Zfs6bX62wbP3QlbPGKUhqDw7SmNkOzY5bHZIYXYpR5g=
|
|
||||||
github.com/buraksezer/consistent v0.9.0/go.mod h1:6BrVajWq7wbKZlTOUPs/XVfR8c0maujuPowduSpZqmw=
|
|
||||||
github.com/cespare/xxhash v1.1.0 h1:a6HrQnmkObjyL+Gs60czilIUGqrzKutQD6XZog3p+ko=
|
|
||||||
github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc=
|
|
||||||
github.com/coreos/bbolt v0.0.0-20180318001526-af9db2027c98/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk=
|
github.com/coreos/bbolt v0.0.0-20180318001526-af9db2027c98/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk=
|
||||||
github.com/cpuguy83/go-md2man v1.0.8/go.mod h1:N6JayAiVKtlHSnuTCeuLSQVs75hb8q+dYQLjr7cDsKY=
|
github.com/cpuguy83/go-md2man v1.0.8/go.mod h1:N6JayAiVKtlHSnuTCeuLSQVs75hb8q+dYQLjr7cDsKY=
|
||||||
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||||
|
|
@ -100,8 +92,10 @@ github.com/klauspost/cpuid v1.2.3/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgo
|
||||||
github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
|
github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
|
||||||
github.com/konsorten/go-windows-terminal-sequences v1.0.2/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
|
github.com/konsorten/go-windows-terminal-sequences v1.0.2/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
|
||||||
github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg=
|
github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg=
|
||||||
|
github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI=
|
||||||
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
|
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
|
||||||
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
|
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
|
||||||
|
github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE=
|
||||||
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
|
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
|
||||||
github.com/markbates/oncer v0.0.0-20181203154359-bf2de49a0be2/go.mod h1:Ld9puTsIW75CHf65OeIOkyKbteujpZVXDpWK6YGZbxE=
|
github.com/markbates/oncer v0.0.0-20181203154359-bf2de49a0be2/go.mod h1:Ld9puTsIW75CHf65OeIOkyKbteujpZVXDpWK6YGZbxE=
|
||||||
github.com/markbates/safe v1.0.1/go.mod h1:nAqgmRi7cY2nqMc92/bSEeQA+R4OheNU2T1kNSCBdG0=
|
github.com/markbates/safe v1.0.1/go.mod h1:nAqgmRi7cY2nqMc92/bSEeQA+R4OheNU2T1kNSCBdG0=
|
||||||
|
|
@ -162,8 +156,6 @@ github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1
|
||||||
github.com/smartystreets/goconvey v0.0.0-20181108003508-044398e4856c/go.mod h1:XDJAKZRPZ1CvBcN2aX5YOUTYGHki24fSF0Iv48Ibg0s=
|
github.com/smartystreets/goconvey v0.0.0-20181108003508-044398e4856c/go.mod h1:XDJAKZRPZ1CvBcN2aX5YOUTYGHki24fSF0Iv48Ibg0s=
|
||||||
github.com/smartystreets/goconvey v0.0.0-20190330032615-68dc04aab96a h1:pa8hGb/2YqsZKovtsgrwcDH1RZhVbTKCjLp47XpqCDs=
|
github.com/smartystreets/goconvey v0.0.0-20190330032615-68dc04aab96a h1:pa8hGb/2YqsZKovtsgrwcDH1RZhVbTKCjLp47XpqCDs=
|
||||||
github.com/smartystreets/goconvey v0.0.0-20190330032615-68dc04aab96a/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA=
|
github.com/smartystreets/goconvey v0.0.0-20190330032615-68dc04aab96a/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA=
|
||||||
github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72 h1:qLC7fQah7D6K1B0ujays3HV9gkFtllcxhzImRR7ArPQ=
|
|
||||||
github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA=
|
|
||||||
github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ=
|
github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ=
|
||||||
github.com/spf13/pflag v1.0.3 h1:zPAT6CGy6wXeQ7NtTnaTerfKOsV6V6F8agHXFiazDkg=
|
github.com/spf13/pflag v1.0.3 h1:zPAT6CGy6wXeQ7NtTnaTerfKOsV6V6F8agHXFiazDkg=
|
||||||
github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
|
github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
|
||||||
|
|
@ -224,6 +216,8 @@ golang.org/x/sys v0.0.0-20190419153524-e8e3143a4f4a/go.mod h1:h1NjWce9XRLGQEsW7w
|
||||||
golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
golang.org/x/sys v0.0.0-20190531175056-4c3a928424d2 h1:T5DasATyLQfmbTpfEXx/IOL9vfjzW6up+ZDkmHvIf2s=
|
golang.org/x/sys v0.0.0-20190531175056-4c3a928424d2 h1:T5DasATyLQfmbTpfEXx/IOL9vfjzW6up+ZDkmHvIf2s=
|
||||||
golang.org/x/sys v0.0.0-20190531175056-4c3a928424d2/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
golang.org/x/sys v0.0.0-20190531175056-4c3a928424d2/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
|
golang.org/x/sys v0.0.0-20220503163025-988cb79eb6c6 h1:nonptSpoQ4vQjyraW20DXPAglgQfVnM9ZC6MmNLMR60=
|
||||||
|
golang.org/x/sys v0.0.0-20220503163025-988cb79eb6c6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
||||||
golang.org/x/text v0.3.5 h1:i6eZZ+zk0SOf0xgBpEpPD18qWcJda6q1sxt3S0kzyUQ=
|
golang.org/x/text v0.3.5 h1:i6eZZ+zk0SOf0xgBpEpPD18qWcJda6q1sxt3S0kzyUQ=
|
||||||
golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
|
golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
|
||||||
|
|
@ -243,6 +237,7 @@ google.golang.org/appengine v1.3.0 h1:FBSsiFRMz3LBeXIomRnVzrQwSDj4ibvcRexLG0LZGQ
|
||||||
google.golang.org/appengine v1.3.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
|
google.golang.org/appengine v1.3.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
|
||||||
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
||||||
gopkg.in/check.v1 v1.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
gopkg.in/check.v1 v1.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
||||||
|
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY=
|
||||||
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
||||||
gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI=
|
gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI=
|
||||||
gopkg.in/fsnotify.v1 v1.4.7 h1:xOHLXZwVvI9hhs+cLKq5+I5onOuwQLhQwiu63xxlHs4=
|
gopkg.in/fsnotify.v1 v1.4.7 h1:xOHLXZwVvI9hhs+cLKq5+I5onOuwQLhQwiu63xxlHs4=
|
||||||
|
|
|
||||||
78
memcache.go
78
memcache.go
|
|
@ -1,78 +0,0 @@
|
||||||
package storage
|
|
||||||
|
|
||||||
import (
|
|
||||||
"errors"
|
|
||||||
"local/storage/resolve"
|
|
||||||
"net"
|
|
||||||
"path"
|
|
||||||
|
|
||||||
"github.com/bradfitz/gomemcache/memcache"
|
|
||||||
)
|
|
||||||
|
|
||||||
type Memcache struct {
|
|
||||||
db *memcache.Client
|
|
||||||
}
|
|
||||||
|
|
||||||
type netAddr struct {
|
|
||||||
network string
|
|
||||||
addr string
|
|
||||||
}
|
|
||||||
|
|
||||||
func (a *netAddr) Network() string {
|
|
||||||
return a.network
|
|
||||||
}
|
|
||||||
|
|
||||||
func (a *netAddr) String() string {
|
|
||||||
return a.addr
|
|
||||||
}
|
|
||||||
|
|
||||||
func NewMemcache(addr string, addrs ...string) (*Memcache, error) {
|
|
||||||
for i := len(addrs) - 1; i >= 0; i-- {
|
|
||||||
if len(addrs[i]) == 0 {
|
|
||||||
addrs = append(addrs[:i], addrs[i+1:]...)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
ss := &memcache.ServerList{}
|
|
||||||
if err := ss.SetServers(append([]string{addr}, addrs...)...); err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
if err := ss.Each(func(addr net.Addr) error {
|
|
||||||
conn, err := net.Dial("tcp", addr.String())
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
return conn.Close()
|
|
||||||
}); err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
db := memcache.NewFromSelector(ss)
|
|
||||||
return &Memcache{db: db}, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (mc *Memcache) List(ns []string, limits ...string) ([]string, error) {
|
|
||||||
return nil, errors.New("not impl")
|
|
||||||
}
|
|
||||||
|
|
||||||
func (mc *Memcache) Get(key string, ns ...string) ([]byte, error) {
|
|
||||||
namespace := resolve.Namespace(ns)
|
|
||||||
v, err := mc.db.Get(path.Join(namespace, key))
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
if v == nil {
|
|
||||||
return nil, ErrNotFound
|
|
||||||
}
|
|
||||||
return v.Value, err
|
|
||||||
}
|
|
||||||
|
|
||||||
func (mc *Memcache) Set(key string, value []byte, ns ...string) error {
|
|
||||||
namespace := resolve.Namespace(ns)
|
|
||||||
return mc.db.Set(&memcache.Item{
|
|
||||||
Key: path.Join(namespace, key),
|
|
||||||
Value: value,
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
func (mc *Memcache) Close() error {
|
|
||||||
return mc.db.FlushAll()
|
|
||||||
}
|
|
||||||
|
|
@ -1,94 +0,0 @@
|
||||||
package storage
|
|
||||||
|
|
||||||
import (
|
|
||||||
"errors"
|
|
||||||
"local/storage/resolve"
|
|
||||||
"net"
|
|
||||||
"path"
|
|
||||||
|
|
||||||
"github.com/bradfitz/gomemcache/memcache"
|
|
||||||
"github.com/buraksezer/consistent"
|
|
||||||
"github.com/cespare/xxhash"
|
|
||||||
)
|
|
||||||
|
|
||||||
type MemcacheCluster struct {
|
|
||||||
db *memcache.Client
|
|
||||||
}
|
|
||||||
|
|
||||||
type serverSelector struct {
|
|
||||||
hash *consistent.Consistent
|
|
||||||
}
|
|
||||||
|
|
||||||
func (ss *serverSelector) PickServer(key string) (net.Addr, error) {
|
|
||||||
return &netAddr{
|
|
||||||
network: "tcp",
|
|
||||||
addr: ss.hash.LocateKey([]byte(key)).String(),
|
|
||||||
}, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (ss *serverSelector) Each(each func(net.Addr) error) error {
|
|
||||||
for _, member := range ss.hash.GetMembers() {
|
|
||||||
if err := each(&netAddr{
|
|
||||||
network: "tcp",
|
|
||||||
addr: member.String(),
|
|
||||||
}); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
type hasher struct{}
|
|
||||||
|
|
||||||
func (h hasher) Sum64(data []byte) uint64 {
|
|
||||||
return xxhash.Sum64(data)
|
|
||||||
}
|
|
||||||
|
|
||||||
func NewMemcacheCluster(addr string, addrs ...string) (*MemcacheCluster, error) {
|
|
||||||
cfg := consistent.Config{
|
|
||||||
PartitionCount: 71,
|
|
||||||
ReplicationFactor: 20,
|
|
||||||
Load: 1.25,
|
|
||||||
Hasher: hasher{},
|
|
||||||
}
|
|
||||||
hash := consistent.New(nil, cfg)
|
|
||||||
for _, addr := range append(addrs, addr) {
|
|
||||||
hash.Add(&netAddr{addr: addr})
|
|
||||||
}
|
|
||||||
ss := &serverSelector{
|
|
||||||
hash: hash,
|
|
||||||
}
|
|
||||||
if err := ss.Each(func(addr net.Addr) error {
|
|
||||||
conn, err := net.Dial("tcp", addr.String())
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
return conn.Close()
|
|
||||||
}); err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
db := memcache.NewFromSelector(ss)
|
|
||||||
return &MemcacheCluster{db: db}, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (mc *MemcacheCluster) List(ns []string, limits ...string) ([]string, error) {
|
|
||||||
return nil, errors.New("not impl")
|
|
||||||
}
|
|
||||||
|
|
||||||
func (mc *MemcacheCluster) Get(key string, ns ...string) ([]byte, error) {
|
|
||||||
namespace := resolve.Namespace(ns)
|
|
||||||
v, err := mc.db.Get(path.Join(namespace, key))
|
|
||||||
return v.Value, err
|
|
||||||
}
|
|
||||||
|
|
||||||
func (mc *MemcacheCluster) Set(key string, value []byte, ns ...string) error {
|
|
||||||
namespace := resolve.Namespace(ns)
|
|
||||||
return mc.db.Set(&memcache.Item{
|
|
||||||
Key: path.Join(namespace, key),
|
|
||||||
Value: value,
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
func (mc *MemcacheCluster) Close() error {
|
|
||||||
return mc.db.FlushAll()
|
|
||||||
}
|
|
||||||
32
type.go
32
type.go
|
|
@ -7,21 +7,19 @@ import (
|
||||||
type Type int
|
type Type int
|
||||||
|
|
||||||
const (
|
const (
|
||||||
MAP = Type(iota)
|
MAP = Type(iota)
|
||||||
REDIS = Type(iota)
|
REDIS = Type(iota)
|
||||||
DYNOMITE = Type(iota)
|
DYNOMITE = Type(iota)
|
||||||
BOLT = Type(iota)
|
BOLT = Type(iota)
|
||||||
FILES = Type(iota)
|
FILES = Type(iota)
|
||||||
COCKROACH = Type(iota)
|
COCKROACH = Type(iota)
|
||||||
CACHE = Type(iota)
|
CACHE = Type(iota)
|
||||||
LEVELDB = Type(iota)
|
LEVELDB = Type(iota)
|
||||||
MEMCACHE = Type(iota)
|
MONGO = Type(iota)
|
||||||
MEMCACHECLUSTER = Type(iota)
|
MINIO = Type(iota)
|
||||||
MONGO = Type(iota)
|
RCLONE = Type(iota)
|
||||||
MINIO = Type(iota)
|
MAPSTREAM = Type(iota)
|
||||||
RCLONE = Type(iota)
|
YAML = Type(iota)
|
||||||
MAPSTREAM = Type(iota)
|
|
||||||
YAML = Type(iota)
|
|
||||||
)
|
)
|
||||||
|
|
||||||
func (t Type) String() string {
|
func (t Type) String() string {
|
||||||
|
|
@ -50,10 +48,6 @@ func (t Type) String() string {
|
||||||
return "cache"
|
return "cache"
|
||||||
case LEVELDB:
|
case LEVELDB:
|
||||||
return "leveldb"
|
return "leveldb"
|
||||||
case MEMCACHE:
|
|
||||||
return "memcache"
|
|
||||||
case MEMCACHECLUSTER:
|
|
||||||
return "memcachecluster"
|
|
||||||
case MONGO:
|
case MONGO:
|
||||||
return "mongo"
|
return "mongo"
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue