diff --git a/.gitignore b/.gitignore index fe7f69d..3982bee 100644 --- a/.gitignore +++ b/.gitignore @@ -15,7 +15,7 @@ result.db.* dump.data runtime.trace -bin/redis-full-check +bin/ .DS_Store diff --git a/README.md b/README.md index 1c7446a..3ee7e7a 100644 --- a/README.md +++ b/README.md @@ -1,16 +1,32 @@ -Redis-full-check is used to compare whether two redis have the same data. We also offer a data synchronization tool called [redis-shake](https://github.com/aliyun/redis-shake) to syncing data from one redis to another redis.
-Thanks to the Douyu's WSD team for the support.
+Redis-full-check is used to compare whether two redis have the same data. We +also offer a data synchronization tool called +[redis-shake](https://github.com/aliyun/redis-shake) to syncing data from one +redis to another redis.
Thanks to the Douyu's WSD team for the support. +
* [中文文档](https://yq.aliyun.com/articles/690463) * [下载地址 redis-full-check.tar.gz](https://github.com/alibaba/RedisFullCheck/releases) * [第一次使用,如何进行配置](https://github.com/alibaba/RedisFullCheck/wiki/%E7%AC%AC%E4%B8%80%E6%AC%A1%E4%BD%BF%E7%94%A8%EF%BC%8C%E5%A6%82%E4%BD%95%E8%BF%9B%E8%A1%8C%E9%85%8D%E7%BD%AE%EF%BC%9F) # redis-full-check ---- -Redis-full-check is developed and maintained by NoSQL Team in Alibaba-Cloud Database department.
-Redis-full-check performs full data verification by comparing the data of the source database and the destination database. The entire check process consists of multiple comparisons, in every comparison, redis-full-check fetches data from two dabatases and then compared, the inconsistent data is put into sqlite3 db for the next comparison. By this iteratively comparing method, the difference continues to converge. The following figure shows the dataflow. In every comparison which is the yellow box, redis-full-check fetches all keys firstly. After that, it runs comparison and stores the difference result(key and field) into the sqlite3 db which is the position that keys and fields can be fetched in next round instead of the source database.
+--- Redis-full-check is developed and maintained by NoSQL Team in Alibaba-Cloud +Database department.
Redis-full-check performs full data verification by +comparing the data of the source database and the destination database. The +entire check process consists of multiple comparisons, in every comparison, +redis-full-check fetches data from two dabatases and then compared, the +inconsistent data is put into sqlite3 db for the next comparison. By this +iteratively comparing method, the difference continues to converge. The +following figure shows the dataflow. In every comparison which is the yellow +box, redis-full-check fetches all keys firstly. After that, it runs comparison +and stores the difference result(key and field) into the sqlite3 db which is +the position that keys and fields can be fetched in next round instead of the +source database.
![dataflow.png](https://github.com/aliyun/redis-full-check/blob/master/resources/dataflow.png)
-Redis-full-check fetches keys from source and then checks these keys exist on the target. So if one key exists on the target but lack on the source, redis-full-check can't find it. If you want to know whether the data in the source and destination databases are exactly the same, you need to set up a bidirectional link:
+Redis-full-check fetches keys from source and then checks these keys exist on +the target. So if one key exists on the target but lack on the source, +redis-full-check can't find it. If you want to know whether the data in the +source and destination databases are exactly the same, you need to set up a +bidirectional link:
* source->RedisFullCheck->target * target->RedisFullCheck->source @@ -75,13 +91,16 @@ Help Options: # Usage --- -Run `./bin/redis-full-check.darwin64` or `redis-full-check.linux64` which is built in OSX and Linux respectively, however, the binaries aren't always the newest version.
-Or you can build redis-full-check yourself according to the following steps:
-* git clone https://github.com/alibaba/RedisFullCheck.git -* cd RedisFullCheck/src/vendor -* GOPATH=\`pwd\`/../..; govendor sync #please note: must install govendor first and then pull all dependencies -* cd ../../ && ./build.sh -* ./redis-full-check -s $(source_redis_ip_port) -p $(source_password) -t $(target_redis_ip_port) -a $(target_password) # these parameters should be given by users +Run `./bin/redis-full-check.darwin64` or `redis-full-check.linux64` which is +built in OSX and Linux respectively, however, the binaries aren't always the +newest version. +If you wish to build redis-full-check on your own, you may follow the instructions +as follows: + +- git clone https://github.com/alibaba/RedisFullCheck.git +- cd RedisFullCheck/ +- ./build.sh +- ./bin/redis-full-check -s $(source_redis_ip_port) -p $(source_password) -t $(target_redis_ip_port) -a $(target_password) # these parameters should be given by users Here comes the sqlite3 example to display the conflict result:
``` @@ -113,5 +132,5 @@ We also provide some tools for synchronization in Shake series.
* [RedisShake](https://github.com/aliyun/RedisShake): redis data synchronization tool. * [RedisFullCheck](https://github.com/aliyun/RedisFullCheck): redis data synchronization verification tool. -Plus, we have a DingDing(钉钉) group so that users can join and discuss, please scan the code. +Plus, we have a DingDing(钉钉) group so that users can join and discuss, please scan the code. ![DingDing](resources/dingding_group.png)
diff --git a/build.sh b/build.sh index 3db71e0..74f5d02 100755 --- a/build.sh +++ b/build.sh @@ -1,7 +1,8 @@ #!/usr/bin/env bash set -o errexit - +export GOARCH=amd64 +export CGO_ENABLED=1 # older version Git don't support --short ! if [ -d ".git" ];then #branch=`git symbolic-ref --short -q HEAD` @@ -17,9 +18,6 @@ branch=$branch","$cid SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" cd "$SCRIPT_DIR" -GOPATH=$(pwd) -export GOPATH - info="main.VERSION=$branch" # golang version goversion=$(go version | awk -F' ' '{print $3;}') @@ -40,15 +38,16 @@ rm -rf ${output} echo "[ BUILD RELEASE ]" run_builder='go build -v' #goos=(windows darwin linux) -#for g in "${goos[@]}"; do -# export GOOS=$g -# echo "try build goos=$g" -# $run_builder -ldflags "-X $info" -o "$output/redis-full-check.$g" "./src/full_check/" -# echo "build successfully!" -#done +goos=(darwin linux) +for g in "${goos[@]}"; do + export GOOS=$g + echo "try build goos=$g" + $run_builder -ldflags "-X $info" -o "$output/redis-full-check.$g" "main.go" + echo "build successfully!" +done -#echo "all build successfully!" +echo "all build successfully!" -$run_builder -ldflags "-X $info" -o "$output/redis-full-check" "./src/full_check/" -echo "build successfully!" +#$run_builder -ldflags "-X $info" -o "$output/redis-full-check" "main.go" +#echo "build successfully!" diff --git a/src/full_check/checker/base.go b/full_check/checker/base.go similarity index 93% rename from src/full_check/checker/base.go rename to full_check/checker/base.go index 4c99b81..4b746a6 100644 --- a/src/full_check/checker/base.go +++ b/full_check/checker/base.go @@ -1,10 +1,10 @@ package checker import ( - "full_check/common" + "github.com/alibaba/RedisFullCheck/full_check/common" "sync" - "full_check/metric" - "full_check/client" + "github.com/alibaba/RedisFullCheck/full_check/metric" + "github.com/alibaba/RedisFullCheck/full_check/client" ) type FullCheckParameter struct { diff --git a/src/full_check/checker/full_value_verifier.go b/full_check/checker/full_value_verifier.go similarity index 99% rename from src/full_check/checker/full_value_verifier.go rename to full_check/checker/full_value_verifier.go index 8b923ba..6c8e25f 100644 --- a/src/full_check/checker/full_value_verifier.go +++ b/full_check/checker/full_value_verifier.go @@ -1,10 +1,10 @@ package checker import ( - "full_check/common" + "github.com/alibaba/RedisFullCheck/full_check/common" "bytes" - "full_check/metric" - "full_check/client" + "github.com/alibaba/RedisFullCheck/full_check/metric" + "github.com/alibaba/RedisFullCheck/full_check/client" "strconv" "reflect" "math" diff --git a/src/full_check/checker/key_outline_verifier.go b/full_check/checker/key_outline_verifier.go similarity index 93% rename from src/full_check/checker/key_outline_verifier.go rename to full_check/checker/key_outline_verifier.go index 62ee251..b2fd125 100644 --- a/src/full_check/checker/key_outline_verifier.go +++ b/full_check/checker/key_outline_verifier.go @@ -1,10 +1,10 @@ package checker import ( - "full_check/common" + "github.com/alibaba/RedisFullCheck/full_check/common" "sync" - "full_check/metric" - "full_check/client" + "github.com/alibaba/RedisFullCheck/full_check/metric" + "github.com/alibaba/RedisFullCheck/full_check/client" ) type KeyOutlineVerifier struct { diff --git a/src/full_check/checker/value_outline_verifier.go b/full_check/checker/value_outline_verifier.go similarity index 91% rename from src/full_check/checker/value_outline_verifier.go rename to full_check/checker/value_outline_verifier.go index 0ff2a76..92e33eb 100644 --- a/src/full_check/checker/value_outline_verifier.go +++ b/full_check/checker/value_outline_verifier.go @@ -1,9 +1,9 @@ package checker import ( - "full_check/metric" - "full_check/common" - "full_check/client" + "github.com/alibaba/RedisFullCheck/full_check/metric" + "github.com/alibaba/RedisFullCheck/full_check/common" + "github.com/alibaba/RedisFullCheck/full_check/client" ) func NewValueOutlineVerifier(stat *metric.Stat, param *FullCheckParameter) *ValueOutlineVerifier { diff --git a/src/full_check/client/address.go b/full_check/client/address.go similarity index 97% rename from src/full_check/client/address.go rename to full_check/client/address.go index 2dee8ec..a3d5d2f 100644 --- a/src/full_check/client/address.go +++ b/full_check/client/address.go @@ -4,7 +4,7 @@ import ( "strings" "fmt" - "full_check/common" + "github.com/alibaba/RedisFullCheck/full_check/common" ) const ( diff --git a/src/full_check/client/client.go b/full_check/client/client.go similarity index 99% rename from src/full_check/client/client.go rename to full_check/client/client.go index bd7e74e..e78c7c3 100644 --- a/src/full_check/client/client.go +++ b/full_check/client/client.go @@ -9,7 +9,7 @@ import ( "time" "errors" - "full_check/common" + "github.com/alibaba/RedisFullCheck/full_check/common" "github.com/garyburd/redigo/redis" redigoCluster "github.com/vinllen/redis-go-cluster" diff --git a/src/full_check/client/db.go b/full_check/client/db.go similarity index 97% rename from src/full_check/client/db.go rename to full_check/client/db.go index 9fe7d23..a69d471 100644 --- a/src/full_check/client/db.go +++ b/full_check/client/db.go @@ -4,7 +4,7 @@ import ( "strconv" "fmt" - "full_check/common" + "github.com/alibaba/RedisFullCheck/full_check/common" "github.com/garyburd/redigo/redis" ) diff --git a/src/full_check/common/cluster.go b/full_check/common/cluster.go similarity index 100% rename from src/full_check/common/cluster.go rename to full_check/common/cluster.go diff --git a/src/full_check/common/command.go b/full_check/common/command.go similarity index 100% rename from src/full_check/common/command.go rename to full_check/common/command.go diff --git a/src/full_check/common/common.go b/full_check/common/common.go similarity index 100% rename from src/full_check/common/common.go rename to full_check/common/common.go diff --git a/src/full_check/common/helper.go b/full_check/common/helper.go similarity index 100% rename from src/full_check/common/helper.go rename to full_check/common/helper.go diff --git a/src/full_check/common/keytype.go b/full_check/common/keytype.go similarity index 100% rename from src/full_check/common/keytype.go rename to full_check/common/keytype.go diff --git a/src/full_check/common/log.go b/full_check/common/log.go similarity index 100% rename from src/full_check/common/log.go rename to full_check/common/log.go diff --git a/src/full_check/common/mix.go b/full_check/common/mix.go similarity index 100% rename from src/full_check/common/mix.go rename to full_check/common/mix.go diff --git a/src/full_check/common/speed.go b/full_check/common/speed.go similarity index 100% rename from src/full_check/common/speed.go rename to full_check/common/speed.go diff --git a/src/full_check/common/trieTree.go b/full_check/common/trieTree.go similarity index 100% rename from src/full_check/common/trieTree.go rename to full_check/common/trieTree.go diff --git a/src/full_check/common/trieTree_test.go b/full_check/common/trieTree_test.go similarity index 100% rename from src/full_check/common/trieTree_test.go rename to full_check/common/trieTree_test.go diff --git a/src/full_check/configure/conf.go b/full_check/configure/conf.go similarity index 100% rename from src/full_check/configure/conf.go rename to full_check/configure/conf.go diff --git a/src/full_check/full_check/full_check.go b/full_check/full_check/full_check.go similarity index 97% rename from src/full_check/full_check/full_check.go rename to full_check/full_check/full_check.go index e2432a4..cca36b3 100644 --- a/src/full_check/full_check/full_check.go +++ b/full_check/full_check/full_check.go @@ -12,11 +12,11 @@ import ( "sync" "time" - "full_check/common" - "full_check/metric" - "full_check/checker" - "full_check/configure" - "full_check/client" + "github.com/alibaba/RedisFullCheck/full_check/checker" + "github.com/alibaba/RedisFullCheck/full_check/client" + "github.com/alibaba/RedisFullCheck/full_check/common" + "github.com/alibaba/RedisFullCheck/full_check/configure" + "github.com/alibaba/RedisFullCheck/full_check/metric" _ "github.com/mattn/go-sqlite3" ) @@ -232,12 +232,12 @@ func (p *FullCheck) Start() { panic(common.Logger.Critical(err)) } - common.Logger.Infof("sourceDbType=%v, p.sourcePhysicalDBList=%v", p.FullCheckParameter.SourceHost.DBType, + common.Logger.Infof("sourceDbType=%v, p.sourcePhysicalDBList=%v", p.SourceHost.DBType, p.sourcePhysicalDBList) sourceClient.Close() for db, keyNum := range p.sourceLogicalDBMap { - if p.SourceHost.IsCluster() == true { + if p.SourceHost.IsCluster() { common.Logger.Infof("db=%d:keys=%d(inaccurate for type cluster)", db, keyNum) } else { common.Logger.Infof("db=%d:keys=%d", db, keyNum) diff --git a/src/full_check/full_check/full_check_test.go b/full_check/full_check/full_check_test.go similarity index 100% rename from src/full_check/full_check/full_check_test.go rename to full_check/full_check/full_check_test.go diff --git a/src/full_check/full_check/scan.go b/full_check/full_check/scan.go similarity index 98% rename from src/full_check/full_check/scan.go rename to full_check/full_check/scan.go index e1c24ac..e1ace82 100644 --- a/src/full_check/full_check/scan.go +++ b/full_check/full_check/scan.go @@ -4,8 +4,8 @@ import ( "strconv" "fmt" - "full_check/common" - "full_check/client" + "github.com/alibaba/RedisFullCheck/full_check/common" + "github.com/alibaba/RedisFullCheck/full_check/client" "github.com/jinzhu/copier" "sync" diff --git a/src/full_check/metric/counter.go b/full_check/metric/counter.go similarity index 94% rename from src/full_check/metric/counter.go rename to full_check/metric/counter.go index 5601f20..420c69e 100644 --- a/src/full_check/metric/counter.go +++ b/full_check/metric/counter.go @@ -3,7 +3,7 @@ package metric import ( "fmt" "sync/atomic" - "full_check/common" + "github.com/alibaba/RedisFullCheck/full_check/common" ) type CounterStat struct { diff --git a/src/full_check/metric/metric.go b/full_check/metric/metric.go similarity index 100% rename from src/full_check/metric/metric.go rename to full_check/metric/metric.go diff --git a/src/full_check/metric/stat.go b/full_check/metric/stat.go similarity index 96% rename from src/full_check/metric/stat.go rename to full_check/metric/stat.go index bf75fb9..b0c2e42 100644 --- a/src/full_check/metric/stat.go +++ b/full_check/metric/stat.go @@ -1,7 +1,7 @@ package metric import ( - "full_check/common" + "github.com/alibaba/RedisFullCheck/full_check/common" ) type Stat struct { diff --git a/go.mod b/go.mod new file mode 100644 index 0000000..340d265 --- /dev/null +++ b/go.mod @@ -0,0 +1,21 @@ +module github.com/alibaba/RedisFullCheck + +go 1.17 + +require ( + github.com/cihub/seelog v0.0.0-20170130134532-f561c5e57575 + github.com/garyburd/redigo v1.6.3 + github.com/gugemichael/nimo4go v0.0.0-20210413043712-ccb2ff0d7b40 + github.com/jessevdk/go-flags v1.5.0 + github.com/jinzhu/copier v0.3.5 + github.com/mattn/go-sqlite3 v1.14.10 + github.com/stretchr/testify v1.7.0 + github.com/vinllen/redis-go-cluster v1.0.1-0.20200120220710-4e63c4a1b59e +) + +require ( + github.com/davecgh/go-spew v1.1.0 // indirect + github.com/pmezard/go-difflib v1.0.0 // indirect + golang.org/x/sys v0.0.0-20210320140829-1e4c9ba3b0c4 // indirect + gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c // indirect +) diff --git a/go.sum b/go.sum new file mode 100644 index 0000000..def3bad --- /dev/null +++ b/go.sum @@ -0,0 +1,27 @@ +github.com/cihub/seelog v0.0.0-20170130134532-f561c5e57575 h1:kHaBemcxl8o/pQ5VM1c8PVE1PubbNx3mjUr09OqWGCs= +github.com/cihub/seelog v0.0.0-20170130134532-f561c5e57575/go.mod h1:9d6lWj8KzO/fd/NrVaLscBKmPigpZpn5YawRPw+e3Yo= +github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8= +github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/garyburd/redigo v1.6.3 h1:HCeeRluvAgMusMomi1+6Y5dmFOdYV/JzoRrrbFlkGIc= +github.com/garyburd/redigo v1.6.3/go.mod h1:rTb6epsqigu3kYKBnaF028A7Tf/Aw5s0cqA47doKKqw= +github.com/gugemichael/nimo4go v0.0.0-20210413043712-ccb2ff0d7b40 h1:6TWAiHVyKs75ZHEn7XtVv7SO7M4rHwvY/5Tf7xdJBkc= +github.com/gugemichael/nimo4go v0.0.0-20210413043712-ccb2ff0d7b40/go.mod h1:ibO7uKpO8fOH/bKD4trmwm5tHhHKiAjC0u288Rd+GnI= +github.com/jessevdk/go-flags v1.5.0 h1:1jKYvbxEjfUl0fmqTCOfonvskHHXMjBySTLW4y9LFvc= +github.com/jessevdk/go-flags v1.5.0/go.mod h1:Fw0T6WPc1dYxT4mKEZRfG5kJhaTDP9pj1c2EWnYs/m4= +github.com/jinzhu/copier v0.3.5 h1:GlvfUwHk62RokgqVNvYsku0TATCF7bAHVwEXoBh3iJg= +github.com/jinzhu/copier v0.3.5/go.mod h1:DfbEm0FYsaqBcKcFuvmOZb218JkPGtvSHsKg8S8hyyg= +github.com/mattn/go-sqlite3 v1.14.10 h1:MLn+5bFRlWMGoSRmJour3CL1w/qL96mvipqpwQW/Sfk= +github.com/mattn/go-sqlite3 v1.14.10/go.mod h1:NyWgC/yNuGj7Q9rpYnZvas74GogHl5/Z4A/KQRfk6bU= +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/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY= +github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/vinllen/redis-go-cluster v1.0.1-0.20200120220710-4e63c4a1b59e h1:Pdu80G0wLCY9Tx5hpBubuhhcCUCvbzuGMsk65lLliBQ= +github.com/vinllen/redis-go-cluster v1.0.1-0.20200120220710-4e63c4a1b59e/go.mod h1:xig5hQAOZX1K+KNUVDqAbhTRzMTPcb257nJl7OCHrI4= +golang.org/x/sys v0.0.0-20210320140829-1e4c9ba3b0c4 h1:EZ2mChiOa8udjfp6rRmswTbtZN/QzUQp4ptM4rnjHvc= +golang.org/x/sys v0.0.0-20210320140829-1e4c9ba3b0c4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c h1:dUUwHk2QECo/6vqA44rthZ8ie2QXMNeKRTHCNY2nXvo= +gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/src/full_check/main.go b/main.go similarity index 95% rename from src/full_check/main.go rename to main.go index 1b9ec3a..e60288e 100644 --- a/src/full_check/main.go +++ b/main.go @@ -6,11 +6,11 @@ import ( "strconv" "strings" - "full_check/configure" - "full_check/full_check" - "full_check/checker" - "full_check/client" - "full_check/common" + "github.com/alibaba/RedisFullCheck/full_check/configure" + "github.com/alibaba/RedisFullCheck/full_check/full_check" + "github.com/alibaba/RedisFullCheck/full_check/checker" + "github.com/alibaba/RedisFullCheck/full_check/client" + "github.com/alibaba/RedisFullCheck/full_check/common" "github.com/jessevdk/go-flags" "github.com/gugemichael/nimo4go" diff --git a/src/vendor/vendor.json b/src/vendor/vendor.json deleted file mode 100644 index a5c5776..0000000 --- a/src/vendor/vendor.json +++ /dev/null @@ -1,125 +0,0 @@ -{ - "comment": "", - "ignore": "test", - "package": [ - { - "path": "-v", - "revision": "" - }, - { - "checksumSHA1": "1bK29RcAjCAMCYS2HS3O18w4m8k=", - "path": "github.com/cihub/seelog", - "revision": "f561c5e57575bb1e0a2167028b7339b3a8d16fb4", - "revisionTime": "2017-01-30T13:45:32Z" - }, - { - "checksumSHA1": "iMU6SM/jawaCOJnyvR5/w8C/C1w=", - "path": "github.com/cihub/seelog/archive", - "revision": "f561c5e57575bb1e0a2167028b7339b3a8d16fb4", - "revisionTime": "2017-01-30T13:45:32Z" - }, - { - "checksumSHA1": "oSd7EVei192qS3uYyCAMx9zV3Y8=", - "path": "github.com/cihub/seelog/archive/gzip", - "revision": "f561c5e57575bb1e0a2167028b7339b3a8d16fb4", - "revisionTime": "2017-01-30T13:45:32Z" - }, - { - "checksumSHA1": "emesF9mCsIQC59VUE2lvjZYpAHU=", - "path": "github.com/cihub/seelog/archive/tar", - "revision": "f561c5e57575bb1e0a2167028b7339b3a8d16fb4", - "revisionTime": "2017-01-30T13:45:32Z" - }, - { - "checksumSHA1": "TXLSkZsRlMifg3mg9+6QgEZJ6m4=", - "path": "github.com/cihub/seelog/archive/zip", - "revision": "f561c5e57575bb1e0a2167028b7339b3a8d16fb4", - "revisionTime": "2017-01-30T13:45:32Z" - }, - { - "checksumSHA1": "CSPbwbyzqA6sfORicn4HFtIhF/c=", - "path": "github.com/davecgh/go-spew/spew", - "revision": "d8f796af33cc11cb798c1aaeb27a4ebc5099927d", - "revisionTime": "2018-08-30T19:11:22Z" - }, - { - "checksumSHA1": "2UmMbNHc8FBr98mJFN1k8ISOIHk=", - "path": "github.com/garyburd/redigo/internal", - "revision": "9e66b83d15a259978be267d0b61838c42c3904e3", - "revisionTime": "2017-07-18T22:17:51Z" - }, - { - "checksumSHA1": "mb7JV1M7OFsuHlXEPY/LdVBGKVg=", - "path": "github.com/garyburd/redigo/redis", - "revision": "9e66b83d15a259978be267d0b61838c42c3904e3", - "revisionTime": "2017-07-18T22:17:51Z" - }, - { - "checksumSHA1": "52vjznwP2OHubLvZkLCUCC9Gp5o=", - "path": "github.com/gugemichael/nimo4go", - "revision": "32795d80f83ab8c37b47589c5068dfbb14545c34", - "revisionTime": "2019-09-04T07:30:57Z" - }, - { - "checksumSHA1": "KhsRogdBpJZ2jgO35be/eM1qyqc=", - "path": "github.com/jessevdk/go-flags", - "revision": "4e64e4a4e2552194cf594243e23aa9baf3b4297e", - "revisionTime": "2016-12-15T10:56:53Z" - }, - { - "checksumSHA1": "e+1CFg/UrAbOy7aN8Ww0iWBk8Vo=", - "path": "github.com/jinzhu/copier", - "revision": "976e0346caa839d22a17f8031a96bcd0870c0128", - "revisionTime": "2019-06-25T01:51:34Z" - }, - { - "checksumSHA1": "vJOfjdXbjymKpuay2nyRnGncJUw=", - "path": "github.com/mattn/go-sqlite3", - "revision": "5160b48509cf5c877bc22c11c373f8c7738cdb38", - "revisionTime": "2017-09-28T04:00:20Z" - }, - { - "checksumSHA1": "LuFv4/jlrmFNnDb/5SCSEPAM9vU=", - "path": "github.com/pmezard/go-difflib/difflib", - "revision": "792786c7400a136282c1664665ae0a8db921c6c2", - "revisionTime": "2016-01-10T10:55:54Z" - }, - { - "checksumSHA1": "xGlhb4NZjBVCNSbb7GIMvhn6mQg=", - "path": "github.com/robfig/cron", - "revision": "b41be1df696709bb6395fe435af20370037c0b4c", - "revisionTime": "2018-05-05T20:34:41Z" - }, - { - "checksumSHA1": "v3LEmqP4Cb6qGCIP7mJk7l2ZXw8=", - "path": "github.com/stretchr/testify/assert", - "revision": "04af85275a5c7ac09d16bb3b9b2e751ed45154e5", - "revisionTime": "2018-10-09T18:43:15Z" - }, - { - "checksumSHA1": "3DvkGtpbJW8oXepRr3wYSs72LmQ=", - "path": "github.com/stretchr/testify/require", - "revision": "04af85275a5c7ac09d16bb3b9b2e751ed45154e5", - "revisionTime": "2018-10-09T18:43:15Z" - }, - { - "checksumSHA1": "uefllr2OtKBGo/kQSAPbW3w6p0A=", - "path": "github.com/stretchr/testify/suite", - "revision": "04af85275a5c7ac09d16bb3b9b2e751ed45154e5", - "revisionTime": "2018-10-09T18:43:15Z" - }, - { - "checksumSHA1": "MOIE8Xg8OghQ6u6xw0oMgUoxbUk=", - "path": "github.com/vinllen/redis-go-cluster", - "revision": "4e63c4a1b59eb765872164d24fa8bf40277532aa", - "revisionTime": "2020-01-20T22:07:10Z" - }, - { - "checksumSHA1": "dr5+PfIRzXeN+l1VG+s0lea9qz8=", - "path": "golang.org/x/net/context", - "revision": "0a9397675ba34b2845f758fe3cd68828369c6517", - "revisionTime": "2017-07-19T03:24:12Z" - } - ], - "rootPath": "/Users/vinllen-ali/code/redis-full-check-github/RedisFullCheck/src" -}