Browse Source

feat:完善goredis/redisjson

renzheng 3 years ago
parent
commit
18156633fb
6 changed files with 371 additions and 45 deletions
  1. 22 1
      go.mod
  2. 36 41
      go.sum
  3. 13 3
      redis/goredis.go
  4. 186 0
      redis/redis_test.go
  5. 95 0
      redisjson/redisjson.go
  6. 19 0
      redisjson/redisjson_test.go

+ 22 - 1
go.mod

@@ -2,4 +2,25 @@ module bp.365521.xyz/BP/redis_v2
 
 go 1.16
 
-require github.com/go-redis/redis/v8 v8.11.4
+require (
+	github.com/dchest/captcha v0.0.0-20200903113550-03f5f0333e1f // indirect
+	github.com/garyburd/redigo v1.6.3 // indirect
+	github.com/go-redis/redis/v8 v8.4.4
+	github.com/influxdata/influxdb-client v0.0.0-00010101000000-000000000000 // indirect
+	github.com/nitishm/go-rejson v0.0.0
+	gopkg.in/mgo.v2 v2.0.0-20190816093944-a6b53ec6cb22 // indirect
+	qfw/util v0.0.0-00010101000000-000000000000 // indirect
+	qfw/util/mongodb v0.0.0-00010101000000-000000000000 // indirect
+	qfw/util/redis v0.0.0-00010101000000-000000000000
+
+)
+
+replace github.com/nitishm/go-rejson => D:/project/git/go-rejson
+
+replace qfw/util/redis => D:/project/qfw/common/src/qfw/util/redis
+
+replace qfw/util/mongodb => D:/project/qfw/common/src/qfw/util/mongodb
+
+replace qfw/util => D:/project/qfw/common/src/qfw/util
+
+replace github.com/influxdata/influxdb-client => D:/project/qfw/common/src/github.com/influxdata/influxdb-client

+ 36 - 41
go.sum

@@ -1,15 +1,18 @@
-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/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=
 github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
-github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
+github.com/dchest/captcha v0.0.0-20200903113550-03f5f0333e1f h1:q/DpyjJjZs94bziQ7YkBmIlpqbVP7yw179rnzoNVX1M=
+github.com/dchest/captcha v0.0.0-20200903113550-03f5f0333e1f/go.mod h1:QGrK8vMWWHQYQ3QU9bw9Y9OPNfxccGzfb41qjvVeXtY=
 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.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
 github.com/fsnotify/fsnotify v1.4.9 h1:hsms1Qyu0jgnwNXIxa+/V/PDsU6CfLf6CNO8H7IWoS4=
 github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ=
-github.com/go-redis/redis/v8 v8.11.4 h1:kHoYkfZP6+pe04aFTnhDH6GDROa5yJdHJVNxV3F46Tg=
-github.com/go-redis/redis/v8 v8.11.4/go.mod h1:2Z2wHZXdQpCDXEGzqMockDpNyYvi2l4Pxt6RJr792+w=
-github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0/go.mod h1:fyg7847qk6SyHyPtNmDHnmrv/HOrqktSC+C9fM+CJOE=
+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/go-redis/redis/v8 v8.4.4 h1:fGqgxCTR1sydaKI00oQf3OmkU/DIe/I/fYXvGklCIuc=
+github.com/go-redis/redis/v8 v8.4.4/go.mod h1:nA0bQuF0i5JFx4Ta9RZxGKXFrQ8cRWntra97f0196iY=
 github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
 github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8=
 github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA=
@@ -17,43 +20,40 @@ github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrU
 github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w=
 github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0=
 github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
-github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk=
-github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY=
+github.com/gomodule/redigo v1.8.3 h1:HR0kYDX2RJZvAup8CsiJwxB4dTCSC0AaUq6S4SiLwUc=
+github.com/gomodule/redigo v1.8.3/go.mod h1:P9dn9mFrCBvWhGE1wpxx6fgq7BAeLBk+UUUzlpkBYO0=
 github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
 github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
 github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
-github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
-github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
+github.com/google/go-cmp v0.5.4 h1:L8R9j+yAqZuZjsqh/z+F1NCffTKKLShY6zXTItVIZ8M=
+github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
 github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU=
+github.com/nxadm/tail v1.4.4 h1:DQuhQpB1tVlglWS2hLQ5OV6B5r8aGxSrPc5Qo6uTN78=
 github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A=
-github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE=
-github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU=
 github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
 github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk=
-github.com/onsi/ginkgo v1.16.4 h1:29JGrr5oVBm5ulCWet69zQkzWipVXIol6ygQUe/EzNc=
-github.com/onsi/ginkgo v1.16.4/go.mod h1:dX+/inL/fNMqNlz0e9LfyB9TswhZpCVdJM/Z6Vvnwo0=
+github.com/onsi/ginkgo v1.14.2 h1:8mVmC9kjFFmA8H4pKMUhcblgifdkOIXPvbhN1T36q1M=
+github.com/onsi/ginkgo v1.14.2/go.mod h1:iSB4RoI2tjJc9BBv4NKIKWKya62Rps+oPG/Lv9klQyY=
 github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY=
 github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo=
-github.com/onsi/gomega v1.16.0 h1:6gjqkI8iiRHMvdccRJM8rVKjCWk6ZIm6FTm3ddIe4/c=
-github.com/onsi/gomega v1.16.0/go.mod h1:HnhC7FXeEQY45zxNK3PPoIUhzk/80Xly9PcubAlGdZY=
+github.com/onsi/gomega v1.10.4 h1:NiTx7EEvBzu9sFOD1zORteLSt3o8gnlvZZwSE9TnY9U=
+github.com/onsi/gomega v1.10.4/go.mod h1:g/HbgYopi++010VEqkFgJHKC09uJiW9UkXvMUuKHUCQ=
+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.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA=
-github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
+github.com/stretchr/testify v1.6.1 h1:hDPOHmpOpP40lSULcqw7IrRb/u7w6RpDC9399XyoNd0=
+github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
+go.opentelemetry.io/otel v0.15.0 h1:CZFy2lPhxd4HlhZnYK8gRyDotksO3Ip9rBweY1vVYJw=
+go.opentelemetry.io/otel v0.15.0/go.mod h1:e4GKElweB8W2gWUqbghw0B8t5MCTccc9212eNHnOHwA=
 golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
-golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
 golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
-golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
 golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
 golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
-golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
 golang.org/x/net v0.0.0-20200520004742-59133d7f0dd7/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
-golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
-golang.org/x/net v0.0.0-20210428140749-89ef3d95e781 h1:DzZ89McO9/gWPsQXS/FVKAlG02ZjaQ6AlZRBimEYOd0=
-golang.org/x/net v0.0.0-20210428140749-89ef3d95e781/go.mod h1:OJAsFXCWl8Ukc7SiCT/9KSuxbyM7479/AVlXFRxuMCk=
+golang.org/x/net v0.0.0-20201202161906-c7110b5ffcbb h1:eBmm0M9fYhWpKZLjQUUKka/LtIxf46G4fxeEz5KJr9U=
+golang.org/x/net v0.0.0-20201202161906-c7110b5ffcbb/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
 golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
 golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
 golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
@@ -61,37 +61,32 @@ golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7w
 golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200519105757-fe76b779f299/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f h1:+Nyd8tzPX9R7BWHguqsrbFdRx3WQ/1ib8I44HXV5yTA=
 golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20210112080510-489259a85091/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20210423082822-04245dca01da h1:b3NXsE2LusjYGGjL5bxEVZZORm/YEFFrWFjR8eFrw/c=
-golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
 golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
+golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
+golang.org/x/text v0.3.3 h1:cokOdA+Jmi5PJGXLlLllQSgYigAEfHXJAERHVMaCc2k=
 golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
-golang.org/x/text v0.3.6 h1:aRYxNxv6iGQlyVaZmk6ZgYEDa+Jg18DxebPSrd6bg1M=
-golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
 golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
-golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
-golang.org/x/tools v0.0.0-20201224043029-2b0845dc783e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
-golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
-golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
+golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543 h1:E7g+9GITq07hpfrRu66IVDexMakfv52eLZ2CXBWiKr4=
 golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
-golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
 google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8=
 google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0=
 google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM=
 google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE=
 google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo=
 google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
-google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
-google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
+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/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys=
+gopkg.in/mgo.v2 v2.0.0-20190816093944-a6b53ec6cb22 h1:VpOs+IwYnYBaFnrNAeB8UUWtL3vEUnzSCL1nVjPhqrw=
+gopkg.in/mgo.v2 v2.0.0-20190816093944-a6b53ec6cb22/go.mod h1:yeKp02qBN3iKW1OzL3MGk2IdtZzaj7SFntXj72NppTA=
 gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ=
 gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw=
 gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
 gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
+gopkg.in/yaml.v2 v2.3.0 h1:clyUAQHOM3G0M3f5vQj7LuJrETvjVot3Z5el9nffUtU=
 gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
-gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY=
-gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ=
+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=

+ 13 - 3
redis/goredis.go

@@ -15,6 +15,7 @@ import (
 	"github.com/go-redis/redis/v8"
 )
 
+//goredis 工具类对象
 type GoRedis struct {
 	//Password string
 	Code   string
@@ -173,6 +174,7 @@ func (r *GoRedis) init(addr, code string, dbs []int, poolSize, minIdleConns, idl
 	}
 }
 
+//int转timeDuration
 func D(t int) time.Duration {
 	return time.Duration(t) * time.Second
 }
@@ -180,6 +182,7 @@ func D(t int) time.Duration {
 //取db
 func (r *GoRedis) GetDB(key string) int {
 	if r.HashDb {
+		//return int(key[len(key)-1]) % len(r.DBS)
 		return hashCode(key) % len(r.DBS)
 	} else {
 		return r.DB
@@ -202,6 +205,8 @@ func (r *GoRedis) Put(key string, val interface{}) (string, error) {
 	str, err := stutsCmd.Result()
 	return str, err
 }
+
+//存key,加过期时间
 func (r *GoRedis) Set(key string, val interface{}, timeout int) (string, error) {
 	stutsCmd := r.CMap[r.GetDB(key)].Set(r.Ctx, key, val, D(timeout))
 	//cmd := r.CMap[r.GetDB(key)].Do(r.Ctx, "setex", key, timeout, val)
@@ -427,7 +432,7 @@ func (r *GoRedis) Mget(key []string) []interface{} {
 
 //取出并删除Key
 func (r *GoRedis) Pop(key string) (result interface{}) {
-	strCmd := r.CMap[r.GetDB(key)].GetDel(r.Ctx, key)
+	strCmd := r.CMap[r.GetDB(key)].Get(r.Ctx, key)
 	b, err := strCmd.Bytes()
 	if err != nil {
 		log.Println("Poperr bytes", err)
@@ -437,7 +442,10 @@ func (r *GoRedis) Pop(key string) (result interface{}) {
 	if err1 != nil {
 		log.Println("Poperr json ", err)
 		return
+	} else {
+		go r.CMap[r.GetDB(key)].Del(r.Ctx, key)
 	}
+
 	return
 }
 
@@ -457,8 +465,9 @@ func (r *GoRedis) LPOP(list string) (result interface{}) {
 	return
 }
 
-func (r *GoRedis) RPUSH(list string, val interface{}) bool {
-	intCmd := r.CMap[r.GetDB(list)].RPush(r.Ctx, list, val)
+//将一个或多个值插入到列表的尾部
+func (r *GoRedis) RPUSH(list string, val ...interface{}) bool {
+	intCmd := r.CMap[r.GetDB(list)].RPush(r.Ctx, list, val...)
 	i, err := intCmd.Result()
 	if err != nil {
 		log.Println("RPUSH bytes", err)
@@ -467,6 +476,7 @@ func (r *GoRedis) RPUSH(list string, val interface{}) bool {
 	return i == 1
 }
 
+//获取列表长度
 func (r *GoRedis) LLEN(list string) int64 {
 	intCmd := r.CMap[r.GetDB(list)].LLen(r.Ctx, list)
 	i, err := intCmd.Result()

+ 186 - 0
redis/redis_test.go

@@ -3,8 +3,13 @@ package redis
 import (
 	"encoding/json"
 	"log"
+	"math/rand"
 	"strings"
 	"testing"
+	"time"
+	"unsafe"
+
+	"qfw/util/redis"
 )
 
 func TestInit(t *testing.T) {
@@ -43,3 +48,184 @@ func TestInit(t *testing.T) {
 
 	log.Println(hashCode("aaaaOppkdlk"))
 }
+
+func Test_bench(t *testing.T) {
+
+	//r1.Init("192.168.3.207:6379=0=20=600")
+
+}
+
+/*
+在700万以内只用1个库旧工具类速度快于新工具类
+*/
+
+const letters = "1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
+
+var src = rand.NewSource(time.Now().UnixNano())
+
+const (
+	// 6 bits to represent a letter index
+	letterIdBits = 6
+	// All 1-bits as many as letterIdBits
+	letterIdMask = 1<<letterIdBits - 1
+	letterIdMax  = 63 / letterIdBits
+)
+
+func randStr(n int) string {
+	b := make([]byte, n)
+	// A rand.Int63() generates 63 random bits, enough for letterIdMax letters!
+	for i, cache, remain := n-1, src.Int63(), letterIdMax; i >= 0; {
+		if remain == 0 {
+			cache, remain = src.Int63(), letterIdMax
+		}
+		if idx := int(cache & letterIdMask); idx < len(letters) {
+			b[i] = letters[idx]
+			i--
+		}
+		cache >>= letterIdBits
+		remain--
+	}
+	return *(*string)(unsafe.Pointer(&b))
+}
+
+func Test_old_redis(t *testing.T) {
+	redis.InitRedis("other=127.0.0.1:6379")
+	chanKey := make(chan string, 50000)
+	go func() {
+		for i := 0; i < 2000000; i++ {
+			chanKey <- randStr(10)
+		}
+	}()
+
+	go func() {
+		ch := make(chan bool, 30)
+		t1 := time.Now().Unix()
+		for i := 0; i < 2000000; i++ {
+			k := <-chanKey
+			ch <- true
+			go func() {
+				defer func() {
+					<-ch
+				}()
+				redis.Put("other", k, 1, 864000)
+			}()
+			if i%20000 == 0 {
+				log.Println("current:", i)
+			}
+		}
+		log.Println("set", time.Now().Unix()-t1)
+	}()
+	select {}
+}
+
+func Test_old_redis_get(t *testing.T) {
+	redis.InitRedis("other=127.0.0.1:6379")
+	chanKey := make(chan string, 50000)
+	go func() {
+		for i := 0; i < 100000; i++ {
+			chanKey <- randStr(10)
+		}
+	}()
+
+	go func() {
+		ch := make(chan bool, 10)
+		t1 := time.Now().Unix()
+		for i := 0; i < 100000; i++ {
+			k := <-chanKey
+			ch <- true
+			go func() {
+				defer func() {
+					<-ch
+				}()
+				redis.Get("other", k)
+			}()
+			if i%20000 == 0 {
+				log.Println("current:", i)
+			}
+		}
+		log.Println("get", time.Now().Unix()-t1)
+	}()
+	select {}
+}
+
+func Test_new_redis(t *testing.T) {
+	r1 := &GoRedis{}
+	r1.Init("127.0.0.1:6379=0-15=30=600")
+	chanKey := make(chan string, 50000)
+	go func() {
+		for i := 0; i < 7000000; i++ {
+			chanKey <- randStr(10)
+		}
+	}()
+
+	go func() {
+		ch := make(chan bool, 30)
+		t1 := time.Now().Unix()
+		for i := 0; i < 7000000; i++ {
+			k := <-chanKey
+			ch <- true
+			go func() {
+				defer func() {
+					<-ch
+				}()
+				r1.Set(k, 1, 864000)
+			}()
+			if i%20000 == 0 {
+				log.Println("current:", i)
+			}
+		}
+		log.Println("set", time.Now().Unix()-t1)
+	}()
+
+	// go func() {
+	// 	t1 := time.Now()
+	// 	for i := 0; i < 1000000; i++ {
+	// 		k := <-chanKey
+	// 		r1.Get(k)
+	// 	}
+	// 	log.Println("get", time.Now()-t1)
+	// }()
+
+	select {}
+}
+
+func Test_new_redis_get(t *testing.T) {
+	r1 := &GoRedis{}
+	r1.Init("127.0.0.1:6379=0-15=30=600")
+	chanKey := make(chan string, 50000)
+	go func() {
+		for i := 0; i < 100000; i++ {
+			chanKey <- randStr(10)
+		}
+	}()
+
+	go func() {
+		ch := make(chan bool, 10)
+		t1 := time.Now().Unix()
+		for i := 0; i < 100000; i++ {
+			k := <-chanKey
+			ch <- true
+			go func() {
+				defer func() {
+					<-ch
+				}()
+				r1.Get(k)
+			}()
+			if i%20000 == 0 {
+				log.Println("current:", i)
+			}
+		}
+		log.Println("set", time.Now().Unix()-t1)
+	}()
+
+	// go func() {
+	// 	t1 := time.Now()
+	// 	for i := 0; i < 1000000; i++ {
+	// 		k := <-chanKey
+	// 		r1.Get(k)
+	// 	}
+	// 	log.Println("get", time.Now()-t1)
+	// }()
+
+	select {}
+}

+ 95 - 0
redisjson/redisjson.go

@@ -0,0 +1,95 @@
+package redisjson
+
+import (
+	"encoding/json"
+	"fmt"
+	"log"
+
+	"bp.365521.xyz/BP/redis_v2/redis"
+	"github.com/nitishm/go-rejson"
+	//"github.com/nitishm/go-rejson/v4/rjs"
+)
+
+type RedisJsonUtil struct {
+	Rh      *rejson.Handler
+	GoRedis *redis.GoRedis
+}
+
+func NewRedisJsonUtil(opt interface{}) (r *RedisJsonUtil) {
+	r = &RedisJsonUtil{}
+	r.GoRedis = &redis.GoRedis{}
+	r.GoRedis.Init(opt)
+	r.Rh = rejson.NewReJSONHandler()
+	r.Rh.SetGoRedisClient(r.GoRedis.CMap[r.GoRedis.DB]) //暂不考虑集群
+	return
+}
+
+//保存对象
+func (r *RedisJsonUtil) Save(coll string, obj interface{}) {
+	id := r.GetId(coll)
+	if m, ok := obj.(map[string]interface{}); ok { //map时增加id元素
+		m["_id"] = id
+		obj = m
+	}
+	res, err := r.Rh.JSONSet(fmt.Sprintf("%s:%d", coll, id), ".", obj)
+	log.Println(id, res, err)
+}
+
+//保存对象
+func (r *RedisJsonUtil) SaveByKey(key string, obj interface{}) {
+	res, err := r.Rh.JSONSet(key, ".", obj)
+	log.Println(key, res, err)
+}
+
+//根据Id获取对象
+/*
+注:使用JSONGet获取汉字的byte数据缺失,中文乱码,改用原生的方法获取
+又修改为克隆到本地进行修改复制、替换
+*/
+func (r *RedisJsonUtil) FindById(coll string, id int64, val interface{}) {
+	res, err := r.Rh.JSONGet(fmt.Sprintf("%s:%d", coll, id), ".")
+	if err == nil {
+		bs, ok := res.([]byte)
+		if ok {
+			json.Unmarshal(bs, val)
+		}
+	} else {
+		log.Println(res, err)
+	}
+	return
+	// aa := r.GoRedis.CMap[r.GoRedis.DB].Do(r.GoRedis.Ctx, "JSON.GET", "user:4", ".").String()
+	// json.Unmarshal(res.([]byte), &v)
+	// b := res.([]byte)
+	// for len(b) > 0 {
+	// 	r, n := utf8.DecodeRune(b) // 解码 b 中的第一个字符
+	// 	fmt.Printf("%c\n", r) // 显示读出的字符
+	// 	b = b[n:]             // 丢弃已读取的字符
+	// }
+}
+
+func (r *RedisJsonUtil) Find(key string) interface{} {
+	// tg := rjs.GETOptionNOESCAPE
+	// tg.SetValue("TRUE")
+	res, err := r.Rh.JSONGet(key, ".") //, tg)
+	if err != nil {
+		log.Println(res, err) //<nil> redis: nil
+	}
+	return res
+
+}
+
+func (r *RedisJsonUtil) DelByKey(key string) {
+	res, err := r.Rh.JSONDel(key, ".")
+	log.Println(res, err)
+}
+
+func (r *RedisJsonUtil) Update(key, path string, val interface{}) {
+	res, err := r.Rh.JSONSet(key, path, val)
+	log.Println(res, err)
+
+}
+
+func (r *RedisJsonUtil) GetId(coll string) int64 {
+	id, _ := r.GoRedis.Incr("coll:" + coll)
+	return id
+}

+ 19 - 0
redisjson/redisjson_test.go

@@ -0,0 +1,19 @@
+package redisjson
+
+import (
+	"log"
+	"testing"
+)
+
+func Test_json(t *testing.T) {
+	ru := NewRedisJsonUtil("192.168.3.207:6579=0=2=600")
+	//ru.Save("user", map[string]interface{}{"name": "王五", "age": 25, "addr": "河南", "goods": []string{"手机", "电脑"}})
+	var v map[string]interface{}
+	ru.FindById("user", 10, &v)
+	log.Println(ru.Find("test")) //byte数组 <nil>
+	log.Println(v)               //map[addr:河南 age:30 goods:[手机 电脑] name:张三]
+	//-------------
+	ru.Update("user:5", "age", 30) //OK <nil>
+	//
+	ru.DelByKey("test") //1 <nil>
+}