ReJSON(RedisサポートJSON)--学習
資料の出所
RedisコマンドはReJSON-a JSON data type for RedisReJSONチュートリアルを参照(RedisはJSONをサポート)
考える
ReJSONはredisを使った素晴らしいツールです.個人的にはこれが好きで、多くの問題を解決することができます.それでは検討を始めましょう
シーンの解決プラットフォームまたはプロジェクトでは、同様のデータが表示されます.構成情報、ユーザーベース情報、多くの常に変わらないデータがデータベースに格納されていますが、私たちのプロジェクトでは、これらのデータに対するクエリーと検証が必要です.データベースのクエリーを減らすためにrejsonを使用して、データベース内のこれらの基礎情報をredisに格納します. データベースの圧力を解決し、一部の情報を格納します.rejosnがあればredisをよく避けることができ、例えばオブジェクトの解析を操作するのに不便である.更新後の処理は非常に面倒です.
rejsonでサポートされているサードパーティ製パッケージhttps://github.com/search?l=J...私が使っているgo言語、rejsonサポートパッケージhttps://github.com/nitishm/go...
学習レコード redis を起動する
redis-server
//Redisデフォルトポートは6379です.ポート番号を変えて起動することもできます.redis-server--port 6380
//Redisはプロファイルを使用して起動します.urlはプロファイルパスredis-server
2.redisサービスを停止redis-cli shutdown
3.私のパソコンにReJSONがインストールされているので、自分でrejsonのコマンドを直接操作することができます.
結果出力:
RedisコマンドはReJSON-a JSON data type for RedisReJSONチュートリアルを参照(RedisはJSONをサポート)
考える
ReJSONはredisを使った素晴らしいツールです.個人的にはこれが好きで、多くの問題を解決することができます.それでは検討を始めましょう
ReJSON
シーンの解決
,
. rejsonでサポートされているサードパーティ製パッケージhttps://github.com/search?l=J...私が使っているgo言語、rejsonサポートパッケージhttps://github.com/nitishm/go...
学習レコード
redis-server
//Redisデフォルトポートは6379です.ポート番号を変えて起動することもできます.redis-server--port 6380
//Redisはプロファイルを使用して起動します.urlはプロファイルパスredis-server
url
, mac redis
redis-server /usr/local/etc/redis.conf
2.redisサービスを停止redis-cli shutdown
3.私のパソコンにReJSONがインストールされているので、自分でrejsonのコマンドを直接操作することができます.
package main
import (
"encoding/json"
"flag"
"fmt"
"log"
// "github.com/garyburd/redigo/redis"
"github.com/gomodule/redigo/redis"
rejson "github.com/nitishm/go-rejson"
)
var addr = flag.String("Server", "localhost:6379", "Redis server address")
type Name struct {
First string `json:"first,omitempty"`
Middle string `json:"middle,omitempty"`
Last string `json:"last,omitempty"`
}
type Student struct {
Name Name `json:"name,omitempty"`
Rank int `json:"rank,omitempty"`
}
func main() {
testMain()
}
type StudentInfo struct {
Info *StudentDetails `json:”info,omitempty”`
Rank int `json:”rank,omitempty”`
}
type StudentDetails struct {
FirstName string
LastName string
Major string
}
func testMain() {
flag.Parse()
conn, err := redis.Dial("tcp", *addr)
if err != nil {
log.Fatalf("Failed to connect to redis-server @ %s", *addr)
}
defer func() {
// conn.Do("FLUSHALL")
conn.Close()
}()
studentJD := StudentInfo{
Info: &StudentDetails{
FirstName: "John",
LastName: "Doe",
Major: "CSE",
},
Rank: 1,
}
b, err := json.Marshal(&studentJD)
if err != nil {
return
}
// _, err = conn.Do(“SET”, “JohnDoe”, string(b))
// if err != nil {
// return
// }
fmt.Println(string(b))
_, err = rejson.JSONSet(conn, "JohnDoeJSON", ".", studentJD, false, false)
if err != nil {
return
}
outJSON, err := rejson.JSONGet(conn, "JohnDoeJSON", "")
if err != nil {
return
}
outStudent := &StudentInfo{}
err = json.Unmarshal(outJSON.([]byte), outStudent)
if err != nil {
return
}
v, _ := json.Marshal(outStudent)
fmt.Println(string(v))
fmt.Println(fmt.Sprintf("Rank:%d", outStudent.Rank))
fmt.Println(fmt.Sprintf("Info:%s", outStudent.Info))
fmt.Println(fmt.Sprintf("Info.FirstName:%s", outStudent.Info.FirstName))
fmt.Println(fmt.Sprintf("Info.LastName:%s", outStudent.Info.LastName))
fmt.Println(fmt.Sprintf("Info.Major:%s", outStudent.Info.Major))
//======= test json.set =====
log.Println(" ====== test json.set =========")
_, err = rejson.JSONSet(conn, "JohnDoeJSON", ".Info.Major", "EE", false, false)
if err != nil {
return
}
outJSON, err = rejson.JSONGet(conn, "JohnDoeJSON", "")
if err != nil {
return
}
outStudent = &StudentInfo{}
err = json.Unmarshal(outJSON.([]byte), outStudent)
if err != nil {
return
}
v, _ = json.Marshal(outStudent)
fmt.Println(string(v))
fmt.Println(fmt.Sprintf("Rank:%d", outStudent.Rank))
fmt.Println(fmt.Sprintf("Info:%s", outStudent.Info))
fmt.Println(fmt.Sprintf("Info.FirstName:%s", outStudent.Info.FirstName))
fmt.Println(fmt.Sprintf("Info.LastName:%s", outStudent.Info.LastName))
fmt.Println(fmt.Sprintf("Info.Major:%s", outStudent.Info.Major))
}
結果出力: