読者です 読者をやめる 読者になる 読者になる

DRYな備忘録

Don't Repeat Yourself.

Go言語からredisの基本的なコマンドを叩いてみる【golang】【redis】

ゴール

方針

tcpでredisサーバに接続して、redisのプロトコルでメッセージのやりとりをします。

GoコードからSETしてみる

sample.go

package main

import "net"
import "fmt"
import "bufio"

func info(cmd, resp string, e error) {
    fmt.Printf(
        "#####\t%v\nRESPO\t%v\nERROR\t%v\n",
        cmd,
        resp,
        e,
    )
}
func main() {

    var conn net.Conn
    var reader *bufio.Reader
    var resp []byte
    var err error
    var length int
    var rerr error

    resp = make([]byte, 1024)

    conn, _ = net.Dial("tcp", "localhost:6379")
    reader = bufio.NewReaderSize(conn, 1024)

    fmt.Fprintf(conn, "*3\r\n$3\r\nSET\r\n$7\r\ntainaka\r\n$5\r\nritsu\r\n")

    // "SET mysample002 true\r\n" の結果の表示
    length, rerr = reader.Read(resp)
    info("SET", string(resp), err)
    fmt.Printf("READ STRING %v %v\n", length, rerr)
}
% go run sample.go
#####   SET
RESPO   +OK

ERROR   <nil>
READ STRING 5 <nil>

セットできたかredis-cliで確認

% redis-cli
127.0.0.1:6379> GET tainaka
"ritsu"
127.0.0.1:6379> quit

いけてるやん

ふむふむ

f:id:otiai10:20140430124154p:plain

GoコードからSETしてGETしてみる

sample.go

package main

import "net"
import "fmt"
import "bufio"

func info(cmd, resp string, e error) {
    fmt.Printf(
        "#####\t%v\nRESPO\t%v\nERROR\t%v\n",
        cmd,
        resp,
        e,
    )
}
func main() {

    var conn net.Conn
    var reader *bufio.Reader
    var resp []byte
    var err error
    var length int
    var rerr error

    resp = make([]byte, 1024)

    conn, _ = net.Dial("tcp", "localhost:6379")
    reader = bufio.NewReaderSize(conn, 1024)

    fmt.Fprintf(conn, "*3\r\n$3\r\nSET\r\n$7\r\ntainaka\r\n$5\r\nritsu\r\n")

    // "SET mysample002 true\r\n" の結果の表示
    length, rerr = reader.Read(resp)

    info("SET", string(resp), err)
    fmt.Printf("READ STRING %v %v\n", length, rerr)

    fmt.Fprintf(conn, "*2\r\n$3\r\nGET\r\n$7\r\ntainaka\r\n")
    length, rerr = reader.Read(resp)

    info("GET", string(resp), err)
    fmt.Printf("READ STRING %v %v\n", length, rerr)
}

で、これを実行

% go run sample.go
#####   SET
RESPO   +OK

ERROR   <nil>
READ STRING 5 <nil>
#####   GET
RESPO   $5
ritsu

ERROR   <nil>
READ STRING 11 <nil>

正しくredisプロトコルでやりとりできていることを確認。

こういう煩わしいのを

こういう煩わしいプロトコルの文言つくるとかを一手にやってくれてるのがGo言語だとこれ

ふむ

DRYな備忘録