Golang连接redis哨兵模式

一、go项目环境

D:\code>go env
set GO111MODULE=on
set GOARCH=amd64
set GOBIN=
set GOCACHE=C:\Users\username\AppData\Local\go-build
set GOENV=C:\Users\username\AppData\Roaming\go\env
set GOEXE=.exe
set GOFLAGS=
set GOHOSTARCH=amd64
set GOHOSTOS=windows
set GOINSECURE=
set GONOPROXY=
set GONOSUMDB=
set GOOS=windows
set GOPATH=C:\Users\username\go
set GOPRIVATE=
set GOPROXY=https://goproxy.cn,direct
set GOROOT=C:\Go
set GOSUMDB=off
set GOTMPDIR=
set GOTOOLDIR=C:\Go\pkg\tool\windows_amd64
set GCCGO=gccgo
set AR=ar
set CC=gcc
set CXX=g++
set CGO_ENABLED=1
set GOMOD=D:\code\go.mod
set CGO_CFLAGS=-g -O2
set CGO_CPPFLAGS=
set CGO_CXXFLAGS=-g -O2
set CGO_FFLAGS=-g -O2
set CGO_LDFLAGS=-g -O2
set PKG_CONFIG=pkg-config
set GOGCCFLAGS=-m64 -mthreads -fno-caret-diagnostics -Qunused-arguments -fmessage-length=0 -fdebug-prefix-map=C:\Users\YULIAN~1\AppData\Local\Temp\go-build993173394=/tmp/go-build -gno-record-gcc-switches

D:\code>

二、安装依赖包

go get -u github.com/go-redis/redis/v8
三、代码功能
package main

import (
	"context"
	"fmt"
	"github.com/go-redis/redis/v8"
	"log"
)

type userCredentialLoginCount struct {
	ID                string // 用户id也可能是用户名
	account_pwd_count int    // 账号或密码错误次数
	token_count       int    // 令牌错误次数
}

func main() {
	fmt.Println("hello world")
	//建立连接
	sf := &redis.FailoverOptions{
		// The master name.
		MasterName: "mymaster",
		// A seed list of host:port addresses of sentinel nodes.
		SentinelAddrs: []string{"192.168.55.219:26379", "192.168.55.227:26379", "192.168.55.230:26379"},

		// Following options are copied from Options struct.
		Password: "redis@123.com",
		DB:       2,
	}
	//ctx, _ := context.WithTimeout(context.Background(), time.Millisecond*100)
	//user_credential_login_count := &userCredentialLoginCount{
	//	ID:             "hast_users",
	//	AcountPwdCount: 1,
	//	TokenCount:     2,
	//}
	datas := map[string]interface{}{
		//"id":  "hast_users",
		"tel": 1,
		"age": 2,
	}
	rdb := redis.NewFailoverClient(sf)
	ctx := context.Background()
	fmt.Println("client:", rdb)
	err1 := rdb.Ping(ctx).Err()
	if err1 != nil {
		fmt.Println("Ping:", err1)
	}
	// 删除某个key 以及对应的值
	// rdb.Del(ctx,"hast_users")

	bExist, err := rdb.HExists(ctx, "hash_tests", "tel").Result()
	log.Println(bExist, err)
	bRet, err := rdb.HSet(ctx, "hash_tests", "tel", 3).Result()
	log.Println(bRet, err)

	rdb.HSet(ctx, "hash_tests", "token_count", 2).Result()
	rdb.HSet(ctx, "hash_tests", "account_pwd_count", 3).Result()
	//bExist, err = rdb.HExists(ctx, "hash_tests", "tel").Result()
	//log.Println(bExist, err)
	//resq := rdb.HGet(ctx, "hash_tests", "tel")
	//log.Println(resq.Int())
	hmgetall := rdb.HGetAll(ctx, "hash_tests")
	if hmgetall.Err() != nil {
		log.Printf("###### HMGet hmgetall err", hmgetall.Err())
	}
	log.Printf("###### HMGet hmgetall Val", hmgetall.Val())

	log.Printf("###### HMSet  #################")
	rst := rdb.HMSet(ctx, "hast_users", datas)
	log.Printf("###### HMSet rst err", rst.Err())
	log.Printf("###### HMSet rst Val", rst.Val())
	// 如果要对key设置过期时间
	conn.Expire(ctx, "hast_users", 10*time.Minute)
	
	log.Printf("###### HMGet  #################")

	log.Printf("###### HMGet  tel#################")
	hmget := rdb.HMGet(ctx, "hast_users", "tel")
	if hmget.Err() != nil {
		log.Printf("###### HMGet hmget err", hmget.Err())
	}
	log.Printf("###### HMGet hmget Val", hmget.Val())

	log.Printf("###### HMGet  token_count #################")
	hmget = rdb.HMGet(ctx, "hast_users", "age")
	if hmget.Err() != nil {
		log.Printf("###### HMGet hmget err", hmget.Err())
	}
	log.Printf("###### HMGet hmget Val", hmget.Val())

	bRet, err = rdb.HSet(ctx, "hast_users", "age", 3).Result()
	log.Println(bRet, err)
	log.Printf("###### HMGetALL  #################")
	hmgetall = rdb.HGetAll(ctx, "hast_users")
	if hmgetall.Err() != nil {
		log.Printf("###### HMGet hmgetall err", hmgetall.Err())
	}

	log.Printf("###### HMGet hmgetall Val", hmgetall.Val())

}
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值