解决问题:redisサービス端が切れた时`プロセスが崩壊する(6兄笔记)
10744 ワード
1 package main
2
3 import (
4 "fmt"
5 "github.com/astaxie/beego/logs"
6 "github.com/garyburd/redigo/redis"
7 "ha666/initial"
8 _ "ha666/initial"
9 "strconv"
10 "time"
11 )
12
13 func main() {
14 defer func() {
15 if err := recover(); err != nil {
16 logs.Error("【main】ex:%v", err)
17 time.Sleep(time.Second)
18 }
19 }()
20 logs.Info(" ")
21 rc := initial.RedisClient.Get()
22 defer rc.Close()
23 for {
24 bytesresult, err := redis.ByteSlices(rc.Do("TIME"))
25 if err != nil {
26 fmt.Println(err.Error())
27 return
28 }
29 for _, v := range bytesresult {
30 _, err = strconv.ParseInt(string(v), 10, 64)
31 if err != nil {
32 fmt.Println(err.Error())
33 return
34 }
35 //fmt.Println(il)
36 }
37 time.Sleep(10 * time.Millisecond)
38 }
39 }
2つのエラーが発生しました.
1、defer使用エラー
2、redisクライアントがpoolから取り出した後、エラーを判断する
修正されたコードは次のとおりです.
1 package main
2
3 import (
4 "fmt"
5 "github.com/astaxie/beego/logs"
6 "github.com/garyburd/redigo/redis"
7 "github.com/pkg/errors"
8 "ha666/initial"
9 _ "ha666/initial"
10 "strconv"
11 "time"
12 )
13
14 func main() {
15 for {
16 bytesresult, err := get_redis()
17 if err != nil {
18 fmt.Println(err.Error())
19 continue
20 }
21 for _, v := range bytesresult {
22 il, err := strconv.ParseInt(string(v), 10, 64)
23 if err != nil {
24 fmt.Println(err.Error())
25 continue
26 }
27 fmt.Println(il)
28 }
29 time.Sleep(1000 * time.Millisecond)
30 }
31 }
32
33 func get_redis() ([][]byte, error) {
34 rc := initial.RedisClient.Get()
35 if rc.Err() != nil {
36 return nil, rc.Err()
37 }
38 defer rc.Close()
39 bytesresult, err := redis.ByteSlices(rc.Do("TIME"))
40 return bytesresult, err
41 }