首页后端开发其他后端知识go net怎么实现redis通信协议,具体方法是什么?

go net怎么实现redis通信协议,具体方法是什么?

时间2024-03-26 20:28:03发布访客分类其他后端知识浏览1260
导读:今天就跟大家聊聊有关“go net怎么实现redis通信协议,具体方法是什么?”的内容,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。 图...
今天就跟大家聊聊有关“go net怎么实现redis通信协议,具体方法是什么?”的内容,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。



图解redis通信协议

请求协议:

请求协议一般格式:

*参数数量>
     CR LF
$参数 1 的字节数量>
     CR LF
参数 1 的数据>
     CR LF
...
$参数 N 的字节数量>
     CR LF
参数 N 的数据>
     CR LF

例如,一个登录命令:

*2    									2->
     参数数量
$4    								4->
 字节数量
AUTH
$13
password@2018

返回结果:

+OK

实际上,发送的命令为“*2\r\n$4\r\nAUTH\r\n$13\r\npassword@2018\r\n”

测试代码:

package main

import (
	"bufio"
	"fmt"
	"net"
	"strconv"
	"testing"
	"time"
)
type Conn struct {

	// Shared
	conn    net.Conn
	// Read
	br          *bufio.Reader
	// Write
	bw           *bufio.Writer
}



func (c *Conn) Write(cmd string, args ...string) error {

	_, err := c.bw.WriteString("*" + strconv.Itoa(1 + len(args)) + "\r\n")
	if err != nil {

		return err
	}

	_, err =c.bw.WriteString("$" + strconv.Itoa(len(cmd)) + "\r\n" + cmd + "\r\n")
	if err != nil {

		return err
	}

	for _, v := range args {

		_, err :=c.bw.WriteString("$" + strconv.Itoa(len(v)) + "\r\n" + v + "\r\n")
		if err != nil {

			return err
		}

	}

	err = c.bw.Flush()
	if err != nil {

		return err
	}

	return nil
}


func TestDail(t *testing.T) {

	conn,err  := net.Dial("tcp","127.0.0.1:6379")
	if err != nil {

		panic(err)
	}
    

	var c = &
Conn{

		conn: conn,
		br : bufio.NewReader(conn),
		bw: bufio.NewWriter(conn),
	}

	err = c.Write("AUTH","password@2018")
	if err != nil {

		panic(err)
	}

	p, err := c.br.ReadSlice('\n')
	if err != nil {

		panic(err)
	}

	fmt.Println(string(p))
	err = c.Write("SELECT", "5")
	if err != nil {

		panic(err)
	}

	p, err = c.br.ReadSlice('\n')
	if err != nil {

		panic(err)
	}

	fmt.Println(string(p))
	err = c.Write("keys","*")
	if err != nil {

		panic(err)
	}

	buffer := make([]byte, 4096)
	n, err := c.br.Read(buffer)
	if err != nil {

		panic(err)
	}

	fmt.Println(string(buffer[:n]))
}
    

运行结果

+OK

+OK

*9
$4
set2
$1
s
$4
set3
$7
string3
$4
int1
$4
test
$7
string2
$7
string1
$7
string4



关于“go net怎么实现redis通信协议,具体方法是什么?”的内容就介绍到这,感谢各位的阅读,相信大家对go net怎么实现redis通信协议,具体方法是什么?已经有了进一步的了解。大家如果还想学习更多知识,欢迎关注网络,小编将为大家输出更多高质量的实用文章!

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!


若转载请注明出处: go net怎么实现redis通信协议,具体方法是什么?
本文地址: https://pptw.com/jishu/653739.html
Go语言配置连接池的方法及操作是什么 Bootstrap导航工具条Navbar如何应用,原理是什么

游客 回复需填写必要信息