ゴール
- MacにRedisをインストールしてことはじめ【redis】【MacOS】 - DRYな備忘録 これをやったので
- Goのコードから同じことをしてみます
方針
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
いけてるやん
ふむふむ
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な備忘録