如何使用golang实现一个redis的telnet交互程序

golang网站管理员 Published the article • 0 comments • 5 views • 4 天前 • 来自相关话题

该代码实例只是一个引子,并未实现交互,差一个循环输入,读取用户交互输入的实现。

### 实现步骤

1. 首先我们需要创建一个redis的连接`net.Dial`, 协议是`tcp`,端口6380。
2. `defer conn.Close()` 延迟关闭连接
3. 接下来我们需要做的事情就是发送数据和读取数据`func (conn RedisConn) Command(cmd []byte) ([]byte, error)`


### 代码实例

```go
package main

import (
"bufio"
"fmt"
"net"
"sync"
"unsafe"
)

type RedisConn struct {
RedisConn net.Conn
}

func (conn RedisConn) Command(cmd []byte) ([]byte, error) {
if _, err := conn.RedisConn.Write(cmd); err != nil {
panic(err)
}
reader := bufio.NewReader(conn.RedisConn)
buffer, _, err := reader.ReadLine()
if err != nil {
return nil, err
}
return buffer, nil
}

func main() {

conn, err := net.Dial("tcp", "192.168.1.18:6380")
if err != nil {
panic(err)
}
redis := RedisConn{
RedisConn: conn,
}

defer conn.Close()

if result, err := redis.Command([]byte("Ping\n")); err == nil {
fmt.Println(string(result))
}

if result, err := redis.Command([]byte("set test 2\n")); err == nil {
fmt.Println(string(result))
}

if result, err := redis.Command([]byte("get test\n")); err == nil {
fmt.Println(string(result))
}
}
``` 查看全部

该代码实例只是一个引子,并未实现交互,差一个循环输入,读取用户交互输入的实现。

### 实现步骤

1. 首先我们需要创建一个redis的连接`net.Dial`, 协议是`tcp`,端口6380。
2. `defer conn.Close()` 延迟关闭连接
3. 接下来我们需要做的事情就是发送数据和读取数据`func (conn RedisConn) Command(cmd []byte) ([]byte, error)`


### 代码实例

```go
package main

import (
"bufio"
"fmt"
"net"
"sync"
"unsafe"
)

type RedisConn struct {
RedisConn net.Conn
}

func (conn RedisConn) Command(cmd []byte) ([]byte, error) {
if _, err := conn.RedisConn.Write(cmd); err != nil {
panic(err)
}
reader := bufio.NewReader(conn.RedisConn)
buffer, _, err := reader.ReadLine()
if err != nil {
return nil, err
}
return buffer, nil
}

func main() {

conn, err := net.Dial("tcp", "192.168.1.18:6380")
if err != nil {
panic(err)
}
redis := RedisConn{
RedisConn: conn,
}

defer conn.Close()

if result, err := redis.Command([]byte("Ping\n")); err == nil {
fmt.Println(string(result))
}

if result, err := redis.Command([]byte("set test 2\n")); err == nil {
fmt.Println(string(result))
}

if result, err := redis.Command([]byte("get test\n")); err == nil {
fmt.Println(string(result))
}
}
```