ども、cloudpack の かっぱ (@inokara) です。
はじめに
前の記事で Redis に断続的にアクセスさせたいなとシェルスクリプトで頑張っていたけどせっかくなので Go から Redis を扱ってみようってことで試してみました。
参考
れりごー、れりごー、Redigo
以下のようにRedigoは Redis のドキュメントにも Recommend の星印も付いていることですし…
穴と雪のなんとかっぽいのでRedigoでレリゴーしてみたいと思います。
基本的なれりごー
れりごー、れりごー、Redigo は以下のように Redis に繋ぐところから始めます。
c, err := redis.Dial("tcp", ":6379") if err != nil { // handle error } defer c.Close()
繋ぐことができたら Do
を利用して Redis のコマンド(SET
や GET
等)を以下のように書くことで Redis にアクセスしてデータの書き込み等を行うようです。
Do(commandName string, args ...interface{}) (reply interface{}, err error)
commandName
に SET
とか GET
とか入れますねん。
接続して set して get で少しも寒くないわ
このままじゃだめなんで
レリゴパッケージを導入していきます。(※既に $GOPATH
は設定済みという状態です。)
go get github.com/garyburd/redigo/redis
インストールが完了したら以下のように確認します。
# go list _/path/to/redis-go # go test github.com/garyburd/redigo/redis ok github.com/garyburd/redigo/redis 1.277s
ありのままで
Exampleを参考に以下のような感じで簡単に書けました。
package main import ( "fmt" "os" "flag" "github.com/garyburd/redigo/redis" ) func main() { var h = flag.String("hostname", "127.0.0.1", "Set Hostname") var p = flag.String("port", "6379", "Set Port") var key = flag.String("key", "foo", "Set Key") var val = flag.String("value", "bar", "Set Value") flag.Parse() c, err := redis.Dial("tcp", *h + ":" + *p) if err != nil { fmt.Println(err) os.Exit(1) } // Connection Close defer c.Close() c.Do("SET", *key, *val) s, err := redis.String(c.Do("GET", *key)) if err != nil { fmt.Println(err) os.Exit(1) } fmt.Printf("%#vn", s) }
せっかくなんで引数に Redis のホスト名とかポート番号を渡せるようにもしてます。あと、キーとバリューも。
れりごー、れりごー、Redigo
ということで、ソースコードをビルドして試してみます。
go build redis-client.go
まずはヘルプを確認。
# ./redis-client -h Usage of ./redis-client: -hostname="127.0.0.1": Set Hostname -key="foo": Set Key -port="6379": Set Port -value="bar": Set Value
既に Redis が起動している状態で以下のように実行します。
# ./redis-client "bar"
おお、値が取得出来ましたな。
ちょっとポート番号とかを弄ってみましょう。
# ./redis-client -port=16379 -key=$RANDOM -value=$RANDOM "12516" # ./redis-client -port=16379 -key=$RANDOM -value=$RANDOM "25130" # ./redis-client -port=16379 -key=$RANDOM -value=$RANDOM "24459"
キー、バリューもランダムな値で試してみてます。
これでいいの…
当初は以下のようなシェルスクリプトで SET と GET を繰り返していましたが、これでいいの…少しは(スクリプトの)行が減るわ(少しも寒くないわ)。
#!/usr/bin/env bash while true do KEY=$RANDOM VAL=$RANDOM echo "set $KEY $VAL" | nc 127.0.0.1 16379 echo "get $KEY" | nc 127.0.0.1 16379 done
元記事はこちらです。
「Go から Redis をちょっと扱うメモ(Redigo、 レディゴー、レリゴー)」