github.com/qiuhoude/go-web@v0.0.0-20220223060959-ab545e78f20d/prepare/04_database/demo3_redis/redis_op.go (about) 1 package demo3_redis 2 3 import ( 4 "fmt" 5 "github.com/garyburd/redigo/redis" 6 "reflect" 7 ) 8 9 const ( 10 address = "192.168.1.151:6379" 11 ) 12 13 //打开redis连接 14 func open() { 15 conn, err := redis.Dial("tcp", address) 16 if err != nil { 17 fmt.Println("connect redis error :", err) 18 return 19 } 20 fmt.Println("connect success ...") 21 defer conn.Close() 22 } 23 24 func getSet() { 25 conn, err := redis.Dial("tcp", address) 26 if err != nil { 27 fmt.Println("connect redis error :", err) 28 return 29 } 30 fmt.Println("connect success ...") 31 defer conn.Close() 32 reply, err := conn.Do("set", "language", "golang") 33 if err != nil { 34 fmt.Println("redis set error:", err) 35 } else { 36 fmt.Printf("%T replay:%v \n", reply, reply) 37 } 38 39 name, err := redis.String(conn.Do("get", "language")) 40 if err != nil { 41 fmt.Println("redis get error:", err) 42 } else { 43 fmt.Printf("Got name: %s \n", name) 44 } 45 } 46 47 func mgetmset() { 48 conn, err := redis.Dial("tcp", address) 49 if err != nil { 50 fmt.Println("connect redis error :", err) 51 return 52 } 53 fmt.Println("connect success ...") 54 defer conn.Close() 55 56 _, err = conn.Do("MSET", "name", "hanru", "age", 30) 57 if err != nil { 58 fmt.Println("redis mset error:", err) 59 } 60 res, err := redis.Strings(conn.Do("MGET", "name", "age")) 61 if err != nil { 62 fmt.Println("redis get error:", err) 63 } else { 64 res_type := reflect.TypeOf(res) 65 fmt.Printf("res type : %s \n", res_type) 66 fmt.Printf("MGET name: %s \n", res) 67 fmt.Println(len(res)) 68 } 69 } 70 71 func list() { 72 conn, err := redis.Dial("tcp", address) 73 if err != nil { 74 fmt.Println("connect redis error :", err) 75 return 76 } 77 fmt.Println("connect success ...") 78 defer conn.Close() 79 80 _, err = conn.Do("LPUSH", "list1", "ele1", "ele2", "ele3", "ele4") 81 if err != nil { 82 fmt.Println("redis mset error:", err) 83 } 84 //res, err := redis.String(conn.Do("LPOP", "list1"))//获取栈顶元素 85 //res, err := redis.String(conn.Do("LINDEX", "list1", 3)) //获取指定位置的元素 86 res, err := redis.Strings(conn.Do("LRANGE", "list1", 0, -1)) //获取指定下标范围的元素 87 if err != nil { 88 fmt.Println("redis POP error:", err) 89 } else { 90 res_type := reflect.TypeOf(res) 91 fmt.Printf("res type : %s \n", res_type) 92 fmt.Printf("res : %s \n", res) 93 } 94 } 95 96 func hash() { 97 conn, err := redis.Dial("tcp", address) 98 if err != nil { 99 fmt.Println("connect redis error :", err) 100 return 101 } 102 fmt.Println("connect success ...") 103 defer conn.Close() 104 105 _, err = conn.Do("HSET", "user", "name", "hanru", "age", 30) 106 if err != nil { 107 fmt.Println("redis mset error:", err) 108 } 109 res, err := redis.Int64(conn.Do("HGET", "user", "age")) 110 if err != nil { 111 fmt.Println("redis HGET error:", err) 112 } else { 113 res_type := reflect.TypeOf(res) 114 fmt.Printf("res type : %s \n", res_type) 115 fmt.Printf("res : %d \n", res) 116 } 117 } 118 119 func pipelining() { 120 conn, err := redis.Dial("tcp", address) 121 if err != nil { 122 fmt.Println("connect redis error :", err) 123 return 124 } 125 fmt.Println("connect success ...") 126 defer conn.Close() 127 128 // 使用 pipeline 129 // Send:发送命令至缓冲区 130 conn.Send("HSET", "user", "name", "hanru", "age", "30") 131 conn.Send("HSET", "user", "sex", "female") 132 conn.Send("HGET", "user", "age") 133 // 清空缓冲区,将命令一次性发送至服务器 134 conn.Flush() 135 136 // Recevie:依次读取服务器响应结果,当读取的命令未响应时,该操作会阻塞。 137 res1, err := conn.Receive() 138 fmt.Printf("Receive res1:%v \n", res1) 139 res2, err := conn.Receive() 140 fmt.Printf("Receive res2:%v\n", res2) 141 res3, err := conn.Receive() 142 fmt.Printf("Receive res3:%s\n", res3) 143 144 }