页面“Redis批量删除key”与“Gin”之间的差异

来自linux中国网wiki
(页面间的差异)
跳到导航 跳到搜索
 
 
第1行: 第1行:
[[category:ops]] [[category:redis]]   
+
[[category:go]]
 +
=install=
 +
==pre install golang==
 +
[[Golang]]
 +
<pre>
 +
#apt
 +
#可以指定版本的
 +
sudo apt install  golang
 +
 
 +
sudo apt  install golang-go gccgo-go
 +
sudo apt  install golang-go
 +
</pre>
 +
 
 +
==FQ==
 +
<pre>
 +
tail /etc/profile
 +
#export http_proxy=http://192.168.10.173:8888
 +
#export https_proxy=http://192.168.10.173:8888
 +
 
  
[[Redis-bigkeys]]
+
source /etc/profile
 +
</pre>
  
ulink
+
== install Gin package==
[https://cloud.tencent.com/developer/article/1530197 Redis 高效删除大key]
+
  export PATH=/usr/local/go/bin/:$PATH
=redis cluster 批量删除key=
+
  export GOPATH=/root/go #if U user is root
 +
=== If you're in China===
 +
====如果您使用的 Go 版本是 1.13 及以上 ====
 
<pre>
 
<pre>
#June 19 2020  有空结果一下原来的版本再优化一下
+
go env -w GO111MODULE=on #注意这个打开后面可能会问题导致
cat redis_del_key.sh
+
go env -w GOPROXY=https://goproxy.io,direct
#!/bin/bash
 
# Usage
 
#redis_list=("host:post" "host:post")
 
  
redis_list=( "172.16.200.12:7003" "172.16.200.7:7004" "172.16.200.7:7005" "172.16.200.13:7000" "172.16.200.13:7001" "172.16.200.12:7002")
+
#or
#redis_list=( "172.16.200.13:7000" "172.16.200.13:7001" "172.16.200.12:7002")
+
go env -w GOPROXY=https://mirrors.aliyun.com/goproxy/,direct
#redis_list=("172.16.200.7:7004")
 
password="3636password"
 
  
for info in ${redis_list[@]}
+
# 设置不走 proxy 的私有仓库,多个用逗号相隔(可选)
    do
+
go env -w GOPRIVATE=*.corp.example.com
        echo "开始执行:$info" 
 
        ip=`echo $info | cut -d : -f 1`
 
        port=`echo $info | cut -d : -f 2`
 
  
      for  loop in  `cat key.txt`
+
# 设置不走 proxy 的私有组织(可选)
        do
+
go env -w GOPRIVATE=example.com/org_name
        #echo $loop  |xargs -t -n1 redis-cli -c  -h $ip -p $port -a $password -c del
+
</pre>
        echo $loop  |xargs -t -n1 redis-cli -c  -h $ip -p $port -a $password -c keys
 
        done
 
  
    done
+
====Go 版本是 1.12 及以下 ====
    echo "success done完成"
+
<pre>
 +
# 启用 Go Modules 功能
 +
export GO111MODULE=on
 +
# 配置 GOPROXY 环境变量
 +
export GOPROXY=https://goproxy.io
 +
</pre>
  
# cat key.txt
+
或者,根据[https://goproxy.io/zh/docs/getting-started.html 文档]可以把上面的命令写到.profile或.bash_profile文件中长期生效
infnce:wonderfulCache
 
ext_info
 
  
  
 +
=初始化 gin=
 +
==go mod==
 +
<pre>
 +
go env -w GO111MODULE=on #注意这个打开后面可能会问题导致
 +
go env -w GOPROXY=https://goproxy.io,direct
  
#原来的版本
+
cd  mygo/
 +
mkdir  ginweb
 +
cd ginweb/
 +
go mod init ginweb(名字自定义)
 +
go get -u github.com/gin-gonic/gin #注意 ,用go mod 来管理  june  08 2020  goverdor 已过期 请用 go mod  安装一般用下面的goverdor 版本管理 tool 去安装 这一块可以直接跳过
 +
go run example.go
  
del hello_user_*
+
ps
 +
evan@myxps:~/mygo/ginweb$ echo $GOROOT
 +
/home/evan/go
 +
evan@myxps:~/mygo/ginweb$ echo $GOPATH
 +
/home/evan/go
  
redis-cli keys
+
#别人的例子
 +
编写 HelloWorld 文件,测试运行环境。
  
 +
package main
 +
import "fmt"
 +
func main(){
 +
    fmt.Println("hello,world!")
 +
}
  
redis-cli keys "hello_user_*" | xargs redis-cli del
+
go run hello.go
 +
go build hello.go
  
 +
创建 go.mod 文件
  
./redis-cli -h IP -p PORT -a PASSWORD keys 'key*' | xargs  ./redis-cli -h IP  -p PORT -a PASSWORD del
+
go mod init hello
  
redis-cli    -c  -h    172.31.22.218  -p 7000  -a pass keys 'hello_user_*'| xargs -i redis-cli    -c  -h    172.31.22.218  -p 7000  -a pass  del {}
+
用 Gin 实现一个简单的 http 服务
redis-cli    -c  -h    172.31.22.218  -p 7001  -a pass keys 'hello_user_*'| xargs -i redis-cli    -c  -h    172.31.22.218  -p 7001  -a pass  del {}
 
  
redis-cli    -c  -h    172.31.16.135  -p 7002  -a pass keys 'hello_user_*'| xargs -i  redis-cli    -c  -h    172.31.16.135  -p 7002 -a pass  del {}
+
import (
redis-cli    -c  -h    172.31.16.135  -p 7003  -a pass keys 'hello_user_*'| xargs  -i redis-cli    -c  -h    172.31.16.135  -p 7003 -a pass  del {}
+
    "gopkg.in/gin-gonic/gin.v1"
 +
    "net/http"
 +
)
  
redis-cli    -c  -h     172.31.23.43  -p 7004  -a pass keys 'hello_user_*'| xargs -i  redis-cli    -c  -h    172.31.23.43  -p 7004 -a pass  del {}
+
func main(){
redis-cli    -c  -h     172.31.23.43  -p 7005  -a pass keys 'hello_user_*'| xargs -i  redis-cli    -c  -h    172.31.23.43  -p 7005 -a pass  del {}
+
      
 +
     router := gin.Default()
  
 +
    router.GET("/", func(c *gin.Context) {
 +
        c.String(http.StatusOK, "Hello World")
 +
    })
 +
    router.Run(":8000")
 +
}
  
 +
直接编译执行
  
#!/bin/bash
+
go run hello
redis_comm=/usr/local/redis-5.0.3/bin/redis-cli
 
redis_ser01=192.168.50.175
 
redis_ser02=192.168.50.174
 
$redis_comm -c -h $redis_ser01  -p 7001 -a xxx  keys $1 | xargs -i $redis_comm -c -h $redis_ser01  -p 7001 -a xxx del {}
 
$redis_comm -c -h $redis_ser02  -p 7001 -a xxx  keys $1 | xargs -i $redis_comm -c -h $redis_ser02  -p 7001 -a xxx del {}
 
  
运行:
+
可以看到引用的包都被自动下载了
 +
</pre>
  
./redis_del_key.sh  匹配的key*
+
== 放弃了 Use a vendor tool like Govendor==
 +
  go get -u -v github.com/kardianos/govendor
 +
  go get github.com/kardianos/govendor #在墙外非常快
  
err  
+
  sudo apt  install govendor # apt
  
-i  {} 都是一定要的
+
mkdir -p $GOPATH/src/github.com/myusername/project && cd "$_"
  
redis-cli -n 0 keys "test*" | xargs redis-cli -n 0 del
+
===Vendor init your project and add gin ===
(error) CROSSSLOT Keys in request don't hash to the same slot
+
<pre>
 +
govendor init
 +
govendor fetch github.com/gin-gonic/[email protected]
  
 +
#有时要绝对路径  @后面也可以不加  有时一定要加
 +
/root/go/bin/govendor fetch github.com/gin-gonic/[email protected]
 
</pre>
 
</pre>
  
=del相关=
+
=learn=
 +
https://github.com/astaxie/build-web-application-with-golang
 +
 
 +
https://github.com/avelino/awesome-go
 +
 
 +
 
 +
https://github.com/gin-gonic/examples
 +
 
  
命令和DEL十分相似:删除指定的key(s),若key不存在则该key被跳过。但是,相比DEL会产生阻塞,该命令会在另一个线程中回收内存,因此它是非阻塞的。 这也是该命令名字的由来:仅将keys从keyspace元数据中删除,真正的删除会在后续异步操作。
+
https://learnku.com/docs/gin-gonic/2019
http://www.redis.cn/commands/unlink.html
 
  
 +
[https://www.jianshu.com/p/c0711568660c GO语言web框架Gin之完全指南(一)]
  
[https://www.zybuluo.com/phper/note/609318 redis 中pipline,mset, mget使用对比]
+
[https://www.jianshu.com/p/ebd4413bab73 GO语言web框架Gin之完全指南(二]
  
[https://blog.csdn.net/wojiuguowei/article/details/85096609 redis del与unlink命令用法及实现]
+
[https://www.cnblogs.com/ningskyer/articles/6297356.html 初学Golang:Gin 框架中文文档教程 ]
  
[https://yq.aliyun.com/articles/743207  Redis:del/unlink 命令源码解析]
 
  
[https://www.cnblogs.com/kiko2014551511/p/11531584.html Redis批量删除key的命令]
+
[https://www.jianshu.com/p/2a1a74ad3c3a Gin middleware中间件使用实例]
 +
 
 +
[https://blog.csdn.net/breaksoftware/article/details/84667656  Gin源码解析和例子——路由]
 +
 
 +
=IDE=
 +
 
 +
[https://www.jianshu.com/p/c5368dbd8bf9 golnad and 50.Go Mod 来创建 Gin 项目]
 +
 
 +
=trouble=
 +
== working directory is not part of a module==
 +
<pre>
 +
 
 +
关闭go代理就行了
 +
 
 +
ct$ go run main.go
 +
main.go:6:2: cannot find module providing package github.com/gin-gonic/gin: working directory is not part of a module
 +
evan@myxps:~/go/src/github.com/myusername/project$ go env -w GO111MODULE=off
 +
 
 +
</pre>
 +
 
 +
 
 +
==1.6 err==
 +
<pre>
 +
# go  run main.go
 +
# github.com/myusername/project/vendor/github.com/gin-gonic/gin
 +
vendor/github.com/gin-gonic/gin/context.go:36:26: undefined: binding.MIMEYAML
 +
vendor/github.com/gin-gonic/gin/context.go:600:29: undefined: binding.YAML
 +
vendor/github.com/gin-gonic/gin/context.go:605:29: undefined: binding.Header
 +
vendor/github.com/gin-gonic/gin/context.go:659:31: undefined: binding.YAML
 +
vendor/github.com/gin-gonic/gin/context.go:664:31: undefined: binding.Header
 +
vendor/github.com/gin-gonic/gin/context.go:673:9: undefined: binding.Uri
 +
vendor/github.com/gin-gonic/gin/context.go:896:17: undefined: render.PureJSON
 +
vendor/github.com/gin-gonic/gin/context.go:912:17: undefined: render.ProtoBuf
 +
vendor/github.com/gin-gonic/gin/context.go:1027:7: undefined: binding.MIMEYAML
 +
vendor/github.com/gin-gonic/gin/mode.go:83:2: undefined: binding.EnableDecoderDisallowUnknownFields
 +
 
 +
</pre>
  
 
=see also=
 
=see also=
[https://blog.csdn.net/xujiamin0022016/article/details/103020025?utm_medium=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase  如何优雅地删除Redis大键]
 
  
[https://blog.csdn.net/yangyangye/article/details/100523387  redis集群批量删除模糊key shell脚本]
 
  
[https://blog.csdn.net/yangyangye/article/details/100523387 redis集群批量删除模糊key shell脚本]
+
[https://www.jianshu.com/p/a3f63b5da74c Gin实战:Gin+Mysql简单的Restful风格的API]
 +
 
 +
 
 +
[https://blog.csdn.net/qq_34284638/article/details/104944319  Golang 入门-Gin框架安装及使用]
 +
 
 +
 
 +
 
 +
[https://blog.csdn.net/VanciorH/article/details/96314896  Golang(不存在)的包管理]
 +
 
 +
 
 +
==go mod==
 +
[https://www.cnblogs.com/apocelipes/p/9534885.html  golang包管理解决之道——go modules初探 ]
 +
 
 +
[https://blog.csdn.net/yangyangye/article/details/97243826 go mod常用命令 以及 常见问题]
 +
 
 +
[https://blog.csdn.net/sanbingyutuoniao123/article/details/100903028 go语言web框架gin安装(go mod方式)]
  
[https://www.cnblogs.com/feng0520/p/11067025.html redis cluster集群批量删除中的key]
+
==放弃govendor==
 +
[https://blog.csdn.net/huwh_/article/details/77169858 Golang包管理工具(一)之govendor的使用]
  
[https://my.oschina.net/u/1255588/blog/1563672 Redis集群批量删除key]
+
[https://blog.csdn.net/studyhard232/article/details/81637607  govendor的安装与实践]
  
[https://www.cnblogs.com/0201zcr/p/9647787.html  redis批量删除key 远程批量删除key ]
+
[https://my.oschina.net/u/3628490/blog/2245119 golang使用govendor教程]
  
[https://blog.csdn.net/zj20142213/article/details/80879744  redis集群批量删除指定的key]
+
[https://www.cnblogs.com/shockerli/p/go-package-manage-tool-govendor.html Go 包依赖管理工具 —— govendor]
  
https://blog.csdn.net/qq_36090419/article/details/80537684
+
[https://zhuanlan.zhihu.com/p/59191567 Go Mod对比Go Vendor]
  
[https://www.cnblogs.com/DreamDrive/p/5772198.html  Redis中的批量删除数据库中的Key ]
+
[https://www.jianshu.com/p/88669ba57d04 Govendor使用]

2020年6月28日 (日) 03:29的版本

install

pre install golang

Golang

#apt 
#可以指定版本的
sudo apt install  golang

sudo apt  install golang-go gccgo-go
sudo apt  install golang-go 

FQ

tail  /etc/profile
#export http_proxy=http://192.168.10.173:8888
#export https_proxy=http://192.168.10.173:8888


source /etc/profile

install Gin package

 export PATH=/usr/local/go/bin/:$PATH
 export GOPATH=/root/go #if U user is root 

If you're in China

如果您使用的 Go 版本是 1.13 及以上

go env -w GO111MODULE=on #注意这个打开后面可能会问题导致
go env -w GOPROXY=https://goproxy.io,direct

#or
go env -w GOPROXY=https://mirrors.aliyun.com/goproxy/,direct

# 设置不走 proxy 的私有仓库,多个用逗号相隔(可选)
go env -w GOPRIVATE=*.corp.example.com

# 设置不走 proxy 的私有组织(可选)
go env -w GOPRIVATE=example.com/org_name

Go 版本是 1.12 及以下

# 启用 Go Modules 功能
export GO111MODULE=on
# 配置 GOPROXY 环境变量
export GOPROXY=https://goproxy.io

或者,根据文档可以把上面的命令写到.profile或.bash_profile文件中长期生效


初始化 gin

go mod

go env -w GO111MODULE=on #注意这个打开后面可能会问题导致
go env -w GOPROXY=https://goproxy.io,direct

cd   mygo/
mkdir  ginweb
cd ginweb/
go mod init ginweb(名字自定义)
go get -u github.com/gin-gonic/gin #注意 ,用go mod 来管理  june   08 2020  goverdor 已过期 请用 go mod  安装一般用下面的goverdor 版本管理 tool 去安装 这一块可以直接跳过
 go run example.go 

ps 
evan@myxps:~/mygo/ginweb$ echo $GOROOT
/home/evan/go
evan@myxps:~/mygo/ginweb$ echo $GOPATH
/home/evan/go

#别人的例子
编写 HelloWorld 文件,测试运行环境。

package main
import "fmt"
func main(){
    fmt.Println("hello,world!")
}

go run hello.go
go build hello.go 

创建 go.mod 文件

go mod init hello

用 Gin 实现一个简单的 http 服务

import (
    "gopkg.in/gin-gonic/gin.v1"
    "net/http"
)

func main(){
    
    router := gin.Default()

    router.GET("/", func(c *gin.Context) {
        c.String(http.StatusOK, "Hello World")
    })
    router.Run(":8000")
}

直接编译执行 

go run hello

可以看到引用的包都被自动下载了

放弃了 Use a vendor tool like Govendor

 go get -u -v github.com/kardianos/govendor
 go get github.com/kardianos/govendor #在墙外非常快
sudo apt  install govendor # apt 
mkdir -p $GOPATH/src/github.com/myusername/project && cd "$_"

Vendor init your project and add gin

govendor init
govendor fetch github.com/gin-gonic/[email protected]

#有时要绝对路径  @后面也可以不加  有时一定要加
/root/go/bin/govendor fetch github.com/gin-gonic/[email protected]

learn

https://github.com/astaxie/build-web-application-with-golang

https://github.com/avelino/awesome-go


https://github.com/gin-gonic/examples


https://learnku.com/docs/gin-gonic/2019

GO语言web框架Gin之完全指南(一)

GO语言web框架Gin之完全指南(二

初学Golang:Gin 框架中文文档教程


Gin middleware中间件使用实例

Gin源码解析和例子——路由

IDE

golnad and 50.Go Mod 来创建 Gin 项目

trouble

working directory is not part of a module


关闭go代理就行了 

ct$ go run main.go 
main.go:6:2: cannot find module providing package github.com/gin-gonic/gin: working directory is not part of a module
evan@myxps:~/go/src/github.com/myusername/project$ go env -w GO111MODULE=off


1.6 err

# go   run main.go 
# github.com/myusername/project/vendor/github.com/gin-gonic/gin
vendor/github.com/gin-gonic/gin/context.go:36:26: undefined: binding.MIMEYAML
vendor/github.com/gin-gonic/gin/context.go:600:29: undefined: binding.YAML
vendor/github.com/gin-gonic/gin/context.go:605:29: undefined: binding.Header
vendor/github.com/gin-gonic/gin/context.go:659:31: undefined: binding.YAML
vendor/github.com/gin-gonic/gin/context.go:664:31: undefined: binding.Header
vendor/github.com/gin-gonic/gin/context.go:673:9: undefined: binding.Uri
vendor/github.com/gin-gonic/gin/context.go:896:17: undefined: render.PureJSON
vendor/github.com/gin-gonic/gin/context.go:912:17: undefined: render.ProtoBuf
vendor/github.com/gin-gonic/gin/context.go:1027:7: undefined: binding.MIMEYAML
vendor/github.com/gin-gonic/gin/mode.go:83:2: undefined: binding.EnableDecoderDisallowUnknownFields

see also

Gin实战:Gin+Mysql简单的Restful风格的API


Golang 入门-Gin框架安装及使用


Golang(不存在)的包管理


go mod

golang包管理解决之道——go modules初探

go mod常用命令 以及 常见问题

go语言web框架gin安装(go mod方式)

放弃govendor

Golang包管理工具(一)之govendor的使用

govendor的安装与实践

golang使用govendor教程

Go 包依赖管理工具 —— govendor

Go Mod对比Go Vendor

Govendor使用