TILE38紹介 |
---|
TILE38紹介(1) :基本コマンド |
TILE38紹介(2) :空間系コマンド |
TILE38紹介(3) :Goプログラムからのアクセス1 |
TILE38紹介(4) :Goプログラムからのアクセス2 |
TILE38紹介(5) :Geofencing |
TL;DR
- TILE38はredisのプロトコルに対応しているのでredisクライアントからのアクセスが可能である。
- 本章ではGoでの実装例としてredigoライブラリを使用した基本的なプログラム実装例を説明する。
データ登録と取得
-「 TILE38紹介(1) :基本コマンド」で紹介したtile38-cliを使用したデータ登録と取得について、ここではGoプログラムから行う。
- goredisではDial関数を使用してコネクションを取得し、Do関数でTILE38のコマンドを実行し、Close関数でコネクションを終了する。
main.go
package main
import (
"encoding/json"
"fmt"
"log"
"reflect"
"github.com/garyburd/redigo/redis"
)
func main() {
// db connect
c, err := redis.Dial("tcp", ":9851")
if err != nil {
log.Fatalf("Could not connect: %v\n", err)
}
defer c.Close()
// SET location
ret, err := c.Do("SET", "location", "me", "POINT", 35.6581, 139.6975)
if err != nil {
log.Fatalf("Could not SET: %v\n", err)
}
fmt.Printf("SET ret:%s\n", ret)
// GET location
ret, err = c.Do("GET", "location", "me")
if err != nil {
log.Fatalf("Could not GET: %v\n", err)
}
fmt.Printf("GET ret:%s\n", ret)
}
- Dial関数に接続に必要なプロトコル、接続先情報を引数として指定してコネクションを作成する。
- ここでは直接Dial関数を使用したが、redigoのコネクションプール機能(Pool型)を使用すれば使用リソースの制御と接続オーバヘッドの削減をすることが出来る。
- Do関数にはtile38-cliと同じコマンド(string)と引数を渡すことになるが、引数部分はinterface{}として定義されおり、数値については数値型で直接渡すことになる。
- 以下に実行例を示す。
$ go run main.go
SET ret:OK
GET ret:{"type":"Point","coordinates":[139.6975,35.6581]}
$
- SETコマンドの結果の戻り値は文字列が返り、GETコマンドはJSONオブジェクトの[]byte型の値が返る。
- tile38-cliでGETを実行した場合に{"ok":true,"object":{"type":"Point","coordinates":[139.6975,35.6581]},"elapsed":"9.998µs"}と言うJSON文字列が標準出力されるが、この「"object":〜」の部分が返る。
- 本説明ではコマンド実行で返却されたオブジェクトを表示するに留めたが、実際のプログラムではGoの構造体等のオブジェクトとして扱う場合が多いと考えられる。事象において説明を予定している。