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  }