Go语言:字节流读写(io.Reader/io.Writer)的示例之redis读写

 读写字节流的两个基本接口定义如下:

type Reader interface {
    Read(p []byte) (n int, err error)
}

type Writer interface {
    Write(p []byte) (n int, err error)
}

net.Conn这个接口也定义了上述两个函数,因此即是io.Reader接口也是io.Writer接口。

下面的代码利用net.Conn来执行两条redis客户端操作:

127.0.0.1:6380> set key 75
OK
127.0.0.1:6380> get key
"75"
package main

import (
        "fmt"
        "io"
        "net"
)

func exec(wr io.Writer, rd io.Reader, cmd string) (string, error) {
        var err error
        _, err = wr.Write([]byte(cmd))
        if err != nil {
                return "", err
        }

        var p []byte = make([]byte, 1024, 1024)
        _, err = rd.Read(p)
        if err != nil && err != io.EOF {
                return "", err
        }
        return string(p), nil
}

func main() {
        var conn net.Conn
        var err error
        conn, err = net.Dial("tcp", "127.0.0.1:6380")
        if err != nil {
                fmt.Printf("err=%v\n", err)
                return
        }
        var reply string
        //set key 75
        reply, err = exec(conn, conn, "*3\r\n$3\r\nSET\r\n$3\r\nkey\r\n$2\r\n75\r\n")
        fmt.Printf("set key 75's reply=%s err=%v\n", reply, err)
        //get key
        reply, err = exec(conn, conn, "*2\r\n$3\r\nGET\r\n$3\r\nkey\r\n")
        fmt.Printf("get key's reply=%s err=%v\n", reply, err)
}

输出:

set key 75's reply=+OK
 err=<nil>
get key's reply=$2
75
 err=<nil>

如果需要加入缓冲区请见另外一篇《Go语言:带有缓冲区的字节流读写(bufio.Reader/bufio.Writer)的示例之redis读写

Redis文本协议详见《Redis Protocol specification

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值