ReJSON(RedisサポートJSON)--学習


資料の出所
RedisコマンドはReJSON-a JSON data type for RedisReJSONチュートリアルを参照(RedisはJSONをサポート)
考える
ReJSONはredisを使った素晴らしいツールです.個人的にはこれが好きで、多くの問題を解決することができます.それでは検討を始めましょう ReJSON
シーンの解決
  • プラットフォームまたはプロジェクトでは、同様のデータが表示されます.構成情報、ユーザーベース情報、多くの常に変わらないデータがデータベースに格納されていますが、私たちのプロジェクトでは、これらのデータに対するクエリーと検証が必要です.データベースのクエリーを減らすために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 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))
    
    }

    結果出力: