一站式
企业服务平台
132-8122-9158

>go研究与实践(go与java的研究)

广告位招租
联系电话:13518188210

原本以为抛弃Go,想不到人算比天算好,仍要坚持Go研究与实践不过我发现现在有很多软件都在迁移Java,如果不及时地将它们迁移到新的版本中去的话,那么很容易就会影响我们对程序的理解和开发效率出于前面所提及的考虑,再次需要将Java版运行Redis同样移植至Go版

研究的路线是:

整个研究过程还对Go与Java版Redis进行了比较,同时还发现Go语言使用起来很简洁,并且默认自带Redis连接池

根据我的惯例,通常是原声的API被封装起来,比如以前编写的Java版本Redis的各种操作性能练习:FunTester框架Redis压测准备

Go,如果是这样做的话,那么就需要对整个系统的各个模块建立一个连接池,然后再将这些模块进行封装,并设置好相应的默认返回值和异常处理等还没有在实践中使用过,只有根据自己编写Java的体会先谢了!在随后编写GoRedis辅导之后,我将为这些RedisAPI分享性能测试实践

Go依赖比较简单,我用的go.mod方法,还可以在本地path上下载依赖

github.c_m/go-redis/redisv6.15.9+incompatible

在此找到Go版本Redis库比Java版本均有少量批量操作API,均从M开始,大概因为使用场景不多,在编写Java封装方法时没有留意,改天再寻找JavajedisAPI

packageredisimport("fmtfuntester/basegithub.c_m/go-redis/redislogtime")typeRedisBasestruct{Hoststringdbintpool*redis.Client}funcNewRdisPool(hoststring,dbint)RedisBase{redisBase:=RedisBase{Host:host,db:db}redisBase.pool=redis.NewClient(&;redis.Options{Addr:host,DB:0,MaxRetries:3,MinRetryBackoff:100*time.Millisecond,DialTimeout:5*time.Second,WriteTimeout:1*time.Second,PoolSize:200,MaxConnAge:10*time.Second,IdleTimeout:8*time.Second,})_,err:=redisBase.pool.Ping().Result()iferr!=nil{log.Fatal("连接失败",err)}log.Println("Redis连接成功")ping:=redisBase.Ping()ifping=="PONG"{log.Println("确认连接成功!") }returnredisBase}func(rRedisBase)Ping()string{ping:=r.pool.Ping()result,err:=ping.Result()iferr!=nil{log.Println("确认连接失败")}returnresult}func(rRedisBase)Keys(pattenstring)[]string{result,err:=r.pool.Keys(patten).Result()iferr!=nil{log.Printf("获取keys:%s失败%s",patten,err.Error())returnnil}returnresult}func(rRedisBase)Set(keystring,valueinterface{},secondtime.Duration)string{result,err:=r.pool.Set(key,value,time.Duration(second)*time.Second).Result()iferr!=nil{log.Printf("set:%svalue:%s失败",key,value)returnbase.Empty}returnresult}func(rRedisBase)Get(keystring)string{result,err:=r.pool.Get(key).Result()iferr!=nil{log.Printf("get:%s失败",key)returnbase.Empty}returnresult}func(rRedisBase)GetSet(keystring,valueinterface{})string{result,err:=r.pool.GetSet(key,value).Result()iferr!=nil{log.Printf("set:%svalue:%s失败",key,value)returnbase.Empty}returnresult}func(rRedisBase)SetNX(keystring,valueinterface{},secondint64)bool{result,err:=r.pool.SetNX(key,value,time.Duration(second)*time.Second).Result()iferr!=nil{log.Printf("set:%svalue:%s失败",key,value)returnfalse}returnresult}func(rRedisBase)MGet(keys...string)[]interface{}{result,err:=r.pool.MGet(keys...).Result()iferr!=nil{log.Printf("获取keys:%s失败%s",fmt.Sprint(keys),err.Error())returnnil}returnresult}func(rRedisBase)MSet(keys...string)string{result,err:=r.pool.MSet(keys).Result()iferr!=nil{log.Printf("设置keys:%s失败%s",fmt.Sprint(keys),err.Error())returnbase.Empty}returnresult}func(rRedisBase)Incr(keystring)int64{result,err:=r.pool.Incr(key).Result()iferr!=nil{log.Printf("自增key:%s失败%s",key,err.Error())returnbase.TEST_ERROR}returnresult}func(rRedisBase)IncrBy(keystring,valueint64)int64{result,err:=r.pool.IncrBy(key,value).Result()iferr!=nil{log.Printf("自增key:%s失败%s",key,err.Error())return-1}returnresult}func(rRedisBase)Decr(keystring)int64{result,err:=r.pool.Decr(key).Result()iferr!=nil{log.Printf("自减key:%s失败%s",key,err.Error())returnbase.TEST_ERROR}returnresult}func(rRedisBase)DecrBy(keystring,valueint64)int64{result,err:=r.pool.DecrBy(key,value).Result()iferr!=nil{log.Printf("自减key:%s失败%s",key,err.Error())returnbase.TEST_ERROR}returnresult}func(rRedisBase)Del(keys...string)int64{result,err:=r.pool.Del(keys...).Result()iferr!=nil{log.Printf("删除key:%s失败%s",fmt.Sprintln(keys),err.Error())returnbase.TEST_ERROR}returnresult}func(rRedisBase)Expire(keystring,secondint64)bool{result,err:=r.pool.Expire(key,time.Duration(second)*time.Second).Result()iferr!=nil{log.Printf("设置key:%s过期时间失败%s",fmt.Sprintln(key),err.Error())returnfalse}returnresult}

基本上都是按照教程来编写,之后转到封装后的API上进行练习,手感比较清爽,与Java版本体验基本一致

packagetestimport("funtester/db/redisfuntester/ftoolgithub.c_m/go-playground/assert/v2logstrconvtesting")varpool=redis.NewRdisPool("127.0.0.1:6379",1)funcTestRedis(t*testing.T){varstr="FunTester"set:=pool.Set("fun",str,0)log.Print(set)get:=pool.Get("fun")assert.Equal(t,get,str)getSet:=pool.GetSet("fun",str+ftool.RandomStr(3))log.Println(getSet)pool.Set("aa","32342",0)mGet:=pool.MGet("fun","aa")fori,i2:=rangemGet{log.Printf("index:%dvalue:%s",i,i2)}pool.Expire("fun",300)keys:=pool.Keys("fu*")fori,key:=rangekeys{log.Printf("index:%d,key:%s",i,key)}key:=str+strconv.Itoa(ftool.RandomInt(1000))pool.SetNX(key,"32432",100)log.Println(pool.Get(key))log.Println("22222")i:=pool.MGet(str,key)for_,i3:=rangei{log.Println(i3)}pool.MSet("aa","111","aabbbb","22222")pool.Incr("sum")pool.IncrBy("sum",10)log.Println(pool.Get("sum"))strings:=pool.Keys("aa*")for_,s:=rangestrings{log.Println(s)}pool.Decr("aa")pool.Expire("sum",100)}

相对来说是单调的,只肯定实际效果,整体打印信息混乱,很多方法都不娴熟,大家会看的

2022/06/1821:31:06Redis连接成功2022/06/1821:31:06确认连接成功! ===RUNTestRedis2022/06/1821:31:06OK2022/06/1821:31:06FunTester2022/06/1821:31:06index:0value:FunTesterc3F2022/06/1821:31:06index:1value:323422022/06/1821:31:06index:0,key:fun2022/06/1821:31:06324322022/06/1821:31:06222222022/06/1821:31:06 2022/06/1821:31:06324322022/06/1821:31:06562022/06/1821:31:06aa2022/06/1821:31:06aabbbb2022/06/1821:31:06aaaa---PASS:TestRedis(0.00s)PASS.

赞(9) 联系作者
未经允许不得转载:【聚禄鼎】一站式企业服务平台 » >go研究与实践(go与java的研究)

评论 抢沙发

让我们一起创建更加美好的网络世界

本站部分资源来自于网络收集,若侵犯了你的隐私或版权,请及时联系我们删除有关信息!

扫码添加站长微信

扫码添加小编微信

登录

找回密码

注册