教程集 www.jiaochengji.com
教程集 >  Golang编程  >  golang教程  >  正文 Golang如何连接redis哨兵模式,项目案例,模块化客户端

Golang如何连接redis哨兵模式,项目案例,模块化客户端

发布时间:2022-01-26   编辑:jiaochengji.com
教程集为您提供Golang如何连接redis哨兵模式,项目案例,模块化客户端等资源,欢迎您收藏本站,我们将为您提供最新的Golang如何连接redis哨兵模式,项目案例,模块化客户端资源
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><path stroke-linecap="round" d="M5,0 0,2.5 5,5z" id="raphael-marker-block" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);"/></svg><h3>一、go环境说明</h3> <pre><code class="lang-go hljs">D<span class="token punctuation">:</span>\dev\demo<span class="token operator">></span><span class="token keyword">go</span> env set GO111MODULE<span class="token operator">=</span>on set GOARCH<span class="token operator">=</span>amd64 set GOBIN<span class="token operator">=</span> set GOCACHE<span class="token operator">=</span>C<span class="token punctuation">:</span>\Users\username\AppData\Local\<span class="token keyword">go</span><span class="token operator">-</span>build set GOENV<span class="token operator">=</span>C<span class="token punctuation">:</span>\Users\username\AppData\Roaming\<span class="token keyword">go</span>\env set GOEXE<span class="token operator">=</span><span class="token punctuation">.</span>exe set GOFLAGS<span class="token operator">=</span> set GOHOSTARCH<span class="token operator">=</span>amd64 set GOHOSTOS<span class="token operator">=</span>windows set GOINSECURE<span class="token operator">=</span> set GONOPROXY<span class="token operator">=</span> set GONOSUMDB<span class="token operator">=</span> set GOOS<span class="token operator">=</span>windows set GOPATH<span class="token operator">=</span>C<span class="token punctuation">:</span>\Users\username\<span class="token keyword">go</span> set GOPRIVATE<span class="token operator">=</span> set GOPROXY<span class="token operator">=</span>https<span class="token punctuation">:</span><span class="token operator">/</span><span class="token operator">/</span>goproxy<span class="token punctuation">.</span>io set GOROOT<span class="token operator">=</span>C<span class="token punctuation">:</span>\Go set GOSUMDB<span class="token operator">=</span>off set GOTMPDIR<span class="token operator">=</span> set GOTOOLDIR<span class="token operator">=</span>C<span class="token punctuation">:</span>\Go\pkg\tool\windows_amd64 set GCCGO<span class="token operator">=</span>gccgo set AR<span class="token operator">=</span>ar set CC<span class="token operator">=</span>gcc set CXX<span class="token operator">=</span>g<span class="token operator"> </span> set CGO_ENABLED<span class="token operator">=</span><span class="token number">1</span> set GOMOD<span class="token operator">=</span>D<span class="token punctuation">:</span>\dev\demo\<span class="token keyword">go</span><span class="token punctuation">.</span>mod set CGO_CFLAGS<span class="token operator">=</span><span class="token operator">-</span>g <span class="token operator">-</span>O2 set CGO_CPPFLAGS<span class="token operator">=</span> set CGO_CXXFLAGS<span class="token operator">=</span><span class="token operator">-</span>g <span class="token operator">-</span>O2 set CGO_FFLAGS<span class="token operator">=</span><span class="token operator">-</span>g <span class="token operator">-</span>O2 set CGO_LDFLAGS<span class="token operator">=</span><span class="token operator">-</span>g <span class="token operator">-</span>O2 set PKG_CONFIG<span class="token operator">=</span>pkg<span class="token operator">-</span>config set GOGCCFLAGS<span class="token operator">=</span><span class="token operator">-</span>m64 <span class="token operator">-</span>mthreads <span class="token operator">-</span>fno<span class="token operator">-</span>caret<span class="token operator">-</span>diagnostics <span class="token operator">-</span>Qunused<span class="token operator">-</span>arguments <span class="token operator">-</span>fmessage<span class="token operator">-</span>length<span class="token operator">=</span><span class="token number">0</span> <span class="token operator">-</span>fdebug<span class="token operator">-</span>prefix<span class="token operator">-</span><span class="token keyword">map</span><span class="token operator">=</span>C<span class="token punctuation">:</span>\Users\YULIAN~<span class="token number">1</span>\AppData\Local\Temp\<span class="token keyword">go</span><span class="token operator">-</span>build461750494<span class="token operator">=</span><span class="token operator">/</span>tmp<span class="token operator">/</span><span class="token keyword">go</span><span class="token operator">-</span>build <span class="token operator">-</span>gno<span class="token operator">-</span>record<span class="token operator">-</span>gcc<span class="token operator">-</span>switches D<span class="token punctuation">:</span>\dev\v3\ncloud<span class="token operator">></span> </code></pre> <h4>二、哨兵客户端</h4> <pre><code class="lang-go hljs"><span class="token keyword">package</span> redis <span class="token keyword">import</span> <span class="token punctuation">(</span> <span class="token string">"context"</span> <span class="token string">"fmt"</span> <span class="token string">"github.com/go-redis/redis/v8"</span> <span class="token punctuation">)</span> <span class="token keyword">type</span> SentinelConn <span class="token keyword">struct</span> <span class="token punctuation">{</span> MasterName <span class="token builtin">string</span> SentinelAddrs <span class="token punctuation">[</span><span class="token punctuation">]</span><span class="token builtin">string</span> Password <span class="token builtin">string</span> DB <span class="token builtin">int</span> Client <span class="token operator">*</span>redis<span class="token punctuation">.</span>Client <span class="token punctuation">}</span> <span class="token keyword">func</span> <span class="token punctuation">(</span>sentinel <span class="token operator">*</span>SentinelConn<span class="token punctuation">)</span> <span class="token function">GetConn</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">(</span><span class="token operator">*</span>redis<span class="token punctuation">.</span>Client<span class="token punctuation">,</span> <span class="token builtin">error</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">if</span> sentinel<span class="token punctuation">.</span>Client <span class="token operator">==</span> <span class="token boolean">nil</span> <span class="token punctuation">{</span> <span class="token keyword">return</span> <span class="token boolean">nil</span><span class="token punctuation">,</span> fmt<span class="token punctuation">.</span><span class="token function">Errorf</span><span class="token punctuation">(</span><span class="token string">"redis Client connect is nil"</span><span class="token punctuation">)</span> <span class="token punctuation">}</span> ctx <span class="token operator">:=</span> context<span class="token punctuation">.</span><span class="token function">Background</span><span class="token punctuation">(</span><span class="token punctuation">)</span> err <span class="token operator">:=</span> sentinel<span class="token punctuation">.</span>Client<span class="token punctuation">.</span><span class="token function">Ping</span><span class="token punctuation">(</span>ctx<span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">Err</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token keyword">if</span> err <span class="token operator">!=</span> <span class="token boolean">nil</span> <span class="token punctuation">{</span> <span class="token keyword">return</span> <span class="token boolean">nil</span><span class="token punctuation">,</span> err <span class="token punctuation">}</span> <span class="token keyword">return</span> sentinel<span class="token punctuation">.</span>Client<span class="token punctuation">,</span> <span class="token boolean">nil</span> <span class="token punctuation">}</span> <span class="token keyword">func</span> <span class="token punctuation">(</span>sentinel <span class="token operator">*</span>SentinelConn<span class="token punctuation">)</span> <span class="token function">InitSentinelRedis</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">*</span>redis<span class="token punctuation">.</span>Client <span class="token punctuation">{</span> sf <span class="token operator">:=</span> <span class="token operator">&</span>redis<span class="token punctuation">.</span>FailoverOptions<span class="token punctuation">{</span> MasterName<span class="token punctuation">:</span> sentinel<span class="token punctuation">.</span>MasterName<span class="token punctuation">,</span> SentinelAddrs<span class="token punctuation">:</span> sentinel<span class="token punctuation">.</span>SentinelAddrs<span class="token punctuation">,</span> Password<span class="token punctuation">:</span> sentinel<span class="token punctuation">.</span>Password<span class="token punctuation">,</span> DB<span class="token punctuation">:</span> sentinel<span class="token punctuation">.</span>DB<span class="token punctuation">,</span> <span class="token punctuation">}</span> <span class="token keyword">return</span> redis<span class="token punctuation">.</span><span class="token function">NewFailoverClient</span><span class="token punctuation">(</span>sf<span class="token punctuation">)</span> <span class="token punctuation">}</span> <span class="token keyword">func</span> <span class="token function">NewRedisSentinel</span><span class="token punctuation">(</span>mastername<span class="token punctuation">,</span> password <span class="token builtin">string</span><span class="token punctuation">,</span> addrs <span class="token punctuation">[</span><span class="token punctuation">]</span><span class="token builtin">string</span><span class="token punctuation">,</span> db <span class="token builtin">int</span><span class="token punctuation">)</span> <span class="token operator">*</span>SentinelConn <span class="token punctuation">{</span> sentinel <span class="token operator">:=</span> SentinelConn<span class="token punctuation">{</span> MasterName<span class="token punctuation">:</span> mastername<span class="token punctuation">,</span> SentinelAddrs<span class="token punctuation">:</span> addrs<span class="token punctuation">,</span> Password<span class="token punctuation">:</span> password<span class="token punctuation">,</span> DB<span class="token punctuation">:</span> db<span class="token punctuation">,</span> <span class="token punctuation">}</span> sentinel<span class="token punctuation">.</span>Client <span class="token operator">=</span> sentinel<span class="token punctuation">.</span><span class="token function">InitSentinelRedis</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token keyword">return</span> <span class="token operator">&</span>sentinel <span class="token punctuation">}</span> </code></pre> <h4>三、初始化哨兵客户端</h4> <pre><code class="lang-go hljs"><span class="token keyword">package</span> handler <span class="token keyword">import</span> <span class="token punctuation">(</span> <span class="token string">"context"</span> <span class="token string">"fmt"</span> <span class="token string">"net/http"</span> <span class="token string">"strings"</span> <span class="token string">"time"</span> <span class="token string">"pkg/utils/redis"</span> <span class="token punctuation">)</span> <span class="token keyword">var</span> <span class="token punctuation">(</span> MASTER_NAME <span class="token operator">=</span> <span class="token string">"mymaster"</span> SENTINEL_ADDRS <span class="token operator">=</span> <span class="token punctuation">[</span><span class="token punctuation">]</span><span class="token builtin">string</span><span class="token punctuation">{</span><span class="token string">"192.168.55.219:26379"</span><span class="token punctuation">,</span> <span class="token string">"192.168.55.227:26379"</span><span class="token punctuation">,</span> <span class="token string">"192.168.55.230:26379"</span><span class="token punctuation">}</span> SENTINEL_PASSWORD <span class="token operator">=</span> <span class="token string">"redis@123.com"</span> SENTINEL_DB <span class="token operator">=</span> <span class="token number">1</span> <span class="token punctuation">)</span> <span class="token keyword">var</span> redSentinelConn <span class="token operator">*</span>redis<span class="token punctuation">.</span>SentinelConn <span class="token keyword">func</span> <span class="token function">init</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">if</span> redSentinelConn <span class="token operator">==</span> <span class="token boolean">nil</span> <span class="token punctuation">{</span> redSentinelConn <span class="token operator">=</span> redis<span class="token punctuation">.</span><span class="token function">NewRedisSentinel</span><span class="token punctuation">(</span>MASTER_NAME<span class="token punctuation">,</span> SENTINEL_PASSWORD<span class="token punctuation">,</span> SENTINEL_ADDRS<span class="token punctuation">,</span> SENTINEL_DB<span class="token punctuation">)</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> </code></pre> <h5>四、使用示例</h5> <pre><code class="lang-go hljs"><span class="token comment">// field : count,token_count</span> <span class="token comment">// ctx := context.Background()</span> <span class="token comment">// 登录次数计数器</span> <span class="token keyword">func</span> <span class="token function">getLoginErrorCount</span><span class="token punctuation">(</span>ctx context<span class="token punctuation">.</span>Context<span class="token punctuation">,</span> uname <span class="token punctuation">,</span>field <span class="token builtin">string</span><span class="token punctuation">)</span> <span class="token punctuation">(</span><span class="token builtin">int</span><span class="token punctuation">,</span> <span class="token builtin">error</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> count <span class="token operator">:=</span> <span class="token number">0</span> <span class="token comment">// 默认是没有登录错误次数</span> conn<span class="token punctuation">,</span> err <span class="token operator">:=</span> redSentinelConn<span class="token punctuation">.</span><span class="token function">GetConn</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token keyword">if</span> err <span class="token operator">!=</span> <span class="token boolean">nil</span> <span class="token punctuation">{</span> <span class="token keyword">return</span> count<span class="token punctuation">,</span> err <span class="token punctuation">}</span> bExist<span class="token punctuation">,</span> err <span class="token operator">:=</span> conn<span class="token punctuation">.</span><span class="token function">HExists</span><span class="token punctuation">(</span>ctx<span class="token punctuation">,</span> uname<span class="token punctuation">,</span> field<span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">Result</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token keyword">if</span> err <span class="token operator">!=</span> <span class="token boolean">nil</span> <span class="token punctuation">{</span> <span class="token keyword">return</span> count<span class="token punctuation">,</span> err <span class="token punctuation">}</span> <span class="token keyword">if</span> bExist <span class="token operator">==</span> <span class="token boolean">false</span> <span class="token punctuation">{</span> <span class="token keyword">return</span> count<span class="token punctuation">,</span> <span class="token boolean">nil</span> <span class="token punctuation">}</span> <span class="token keyword">else</span> <span class="token punctuation">{</span> valmap <span class="token punctuation">,</span>err <span class="token operator">:=</span> conn<span class="token punctuation">.</span><span class="token function">HGetAll</span><span class="token punctuation">(</span>ctx<span class="token punctuation">,</span> uname<span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">Result</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token keyword">if</span> err <span class="token operator">!=</span> <span class="token boolean">nil</span> <span class="token punctuation">{</span> log<span class="token punctuation">.</span><span class="token function">Printf</span><span class="token punctuation">(</span><span class="token string">"###### HGetAll err"</span><span class="token punctuation">,</span> err<span class="token punctuation">)</span> <span class="token keyword">return</span> count<span class="token punctuation">,</span> <span class="token boolean">nil</span> <span class="token punctuation">}</span> log<span class="token punctuation">.</span><span class="token function">Printf</span><span class="token punctuation">(</span><span class="token string">"###### HGetAll valmap"</span><span class="token punctuation">,</span> valmap<span class="token punctuation">)</span> val<span class="token punctuation">,</span> err <span class="token operator">:=</span> conn<span class="token punctuation">.</span><span class="token function">HGet</span><span class="token punctuation">(</span>ctx<span class="token punctuation">,</span> uname<span class="token punctuation">,</span> field<span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">Int</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token keyword">if</span> err <span class="token operator">!=</span> <span class="token boolean">nil</span> <span class="token punctuation">{</span> log<span class="token punctuation">.</span><span class="token function">Printf</span><span class="token punctuation">(</span><span class="token string">"###### HMGet hmget err"</span><span class="token punctuation">,</span> err<span class="token punctuation">)</span> <span class="token keyword">return</span> count<span class="token punctuation">,</span> <span class="token boolean">nil</span> <span class="token punctuation">}</span> log<span class="token punctuation">.</span><span class="token function">Printf</span><span class="token punctuation">(</span><span class="token string">"###### HMGet hmget Val"</span><span class="token punctuation">,</span> val<span class="token punctuation">)</span> <span class="token keyword">return</span> val<span class="token punctuation">,</span> <span class="token boolean">nil</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token keyword">func</span> <span class="token function">loginErrorCount</span><span class="token punctuation">(</span>ctx context<span class="token punctuation">.</span>Context<span class="token punctuation">,</span> uname <span class="token punctuation">,</span>field <span class="token builtin">string</span><span class="token punctuation">)</span> <span class="token punctuation">(</span><span class="token builtin">int</span><span class="token punctuation">,</span> <span class="token builtin">error</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> conn<span class="token punctuation">,</span> err <span class="token operator">:=</span> redSentinelConn<span class="token punctuation">.</span><span class="token function">GetConn</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token keyword">if</span> err <span class="token operator">!=</span> <span class="token boolean">nil</span> <span class="token punctuation">{</span> <span class="token keyword">return</span> <span class="token number">0</span><span class="token punctuation">,</span> err <span class="token punctuation">}</span> count<span class="token punctuation">,</span> err <span class="token operator">:=</span> <span class="token function">getLoginErrorCount</span><span class="token punctuation">(</span>ctx<span class="token punctuation">,</span> uname<span class="token punctuation">,</span>field<span class="token punctuation">)</span> log<span class="token punctuation">.</span><span class="token function">Printf</span><span class="token punctuation">(</span><span class="token string">"###### getDoLoginErrorCount count"</span><span class="token punctuation">,</span> count<span class="token punctuation">)</span> <span class="token keyword">if</span> err <span class="token operator">!=</span> <span class="token boolean">nil</span> <span class="token punctuation">{</span> log<span class="token punctuation">.</span><span class="token function">Printf</span><span class="token punctuation">(</span><span class="token string">"doLoginErrorCount err"</span><span class="token punctuation">,</span> err<span class="token punctuation">)</span> <span class="token keyword">return</span> count<span class="token punctuation">,</span> <span class="token boolean">nil</span> <span class="token punctuation">}</span> count<span class="token operator"> </span> <span class="token keyword">if</span> count <span class="token operator"><=</span> <span class="token number">5</span> <span class="token punctuation">{</span> err <span class="token operator">:=</span> conn<span class="token punctuation">.</span><span class="token function">HSet</span><span class="token punctuation">(</span>ctx<span class="token punctuation">,</span> uname<span class="token punctuation">,</span> field<span class="token punctuation">,</span> count<span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">Err</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token keyword">if</span> err <span class="token operator">!=</span> <span class="token boolean">nil</span> <span class="token punctuation">{</span> log<span class="token punctuation">.</span><span class="token function">Printf</span><span class="token punctuation">(</span><span class="token string">"redis set error:"</span><span class="token punctuation">,</span> err<span class="token punctuation">)</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> conn<span class="token punctuation">.</span><span class="token function">Expire</span><span class="token punctuation">(</span>ctx<span class="token punctuation">,</span> uname<span class="token punctuation">,</span> <span class="token number">10</span><span class="token operator">*</span>time<span class="token punctuation">.</span>Minute<span class="token punctuation">)</span> <span class="token keyword">return</span> count<span class="token punctuation">,</span> <span class="token boolean">nil</span> <span class="token punctuation">}</span> </code></pre> 到此这篇关于“Golang如何连接redis哨兵模式,项目案例,模块化客户端”的文章就介绍到这了,更多文章或继续浏览下面的相关文章,希望大家以后多多支持JQ教程网!

您可能感兴趣的文章:
redis基础问答
Redis主从复制及高可用部署(哨兵模式)
Redis主从及哨兵模式
Golang如何连接redis哨兵模式,项目案例,模块化客户端
安装redis和phpredis模块一例
订阅redis接收的json字符串斜杠_用 Golang 实现基于 Redis 的安全高效 RPC 通信
NOSQL - Redis 基础
API接口之安全篇
Redis安装配置教程
三分钟读懂redis数据库

[关闭]
~ ~