Need help with go-rejson?
Click the “chat” button below for chat support from the developer who created it, or find similar developers for support.

About the developer

nitishm
186 Stars 28 Forks MIT License 113 Commits 8 Opened issues

Description

Golang client for redislabs' ReJSON module with support for multilple redis clients (redigo, go-redis)

Services available

!
?

Need anything else?

Contributors list

# 110,888
Go
Kuberne...
Redis
golang
40 commits
# 239,381
swagger
openapi
golang
CSS
39 commits
# 33,864
awk
query-l...
cdp
scrapin...
6 commits
# 145,152
geocodi...
golang
CSS
google-...
1 commit
# 228,820
aws-vpc
golang
kuberne...
HTML
1 commit
# 374,959
payment...
Rails
CSS
Shell
1 commit

Go-ReJSON - a golang client for ReJSON (a JSON data type for Redis)

Go-ReJSON is a Go client for ReJSON Redis Module.

Go Reference test code-analysis codecov Go Report Card GitHub release

ReJSON is a Redis module that implements ECMA-404 The JSON Data Interchange Standard as a native data type. It allows storing, updating and fetching JSON values from Redis keys (documents).

Primary features of ReJSON Module:

* Full support of the JSON standard
* JSONPath-like syntax for selecting element inside documents
* Documents are stored as binary data in a tree structure, allowing fast access to sub-elements
* Typed atomic operations for all JSON values types

Each and every feature of ReJSON Module is fully incorporated in the project.

Enjoy ReJSON with the type-safe Redis client,

Go-Redis/Redis
or use the print-like Redis-api client
GoModule/Redigo
. Go-ReJSON supports both the clients. Use any of the above two client you want, Go-ReJSON helps you out with all its features and functionalities in a more generic and standard way.

Support for

mediocregopher/radix
and other Redis clients is in our RoadMap. Any contributions on the support for other clients is hearty welcome.

Installation

go get github.com/nitishm/go-rejson

Example usage

package main

import ( "encoding/json" "flag" "fmt" "log"

"github.com/nitishm/go-rejson/v4"
goredis "github.com/go-redis/redis/v8"
"github.com/gomodule/redigo/redis"

)

// Name - student name type Name struct { First string json:"first,omitempty" Middle string json:"middle,omitempty" Last string json:"last,omitempty" }

// Student - student object type Student struct { Name Name json:"name,omitempty" Rank int json:"rank,omitempty" }

func Example_JSONSet(rh *rejson.Handler) {

student := Student{
    Name: Name{
        "Mark",
        "S",
        "Pronto",
    },
    Rank: 1,
}
res, err := rh.JSONSet("student", ".", student)
if err != nil {
    log.Fatalf("Failed to JSONSet")
    return
}

if res.(string) == "OK" {
    fmt.Printf("Success: %s\n", res)
} else {
    fmt.Println("Failed to Set: ")
}

studentJSON, err := redis.Bytes(rh.JSONGet("student", "."))
if err != nil {
    log.Fatalf("Failed to JSONGet")
    return
}

readStudent := Student{}
err = json.Unmarshal(studentJSON, &readStudent)
if err != nil {
    log.Fatalf("Failed to JSON Unmarshal")
    return
}

fmt.Printf("Student read from redis : %#v\n", readStudent)

}

func main() { var addr = flag.String("Server", "localhost:6379", "Redis server address")

rh := rejson.NewReJSONHandler()
flag.Parse()

// Redigo Client
conn, err := redis.Dial("tcp", *addr)
if err != nil {
    log.Fatalf("Failed to connect to redis-server @ %s", *addr)
}
defer func() {
    _, err = conn.Do("FLUSHALL")
    err = conn.Close()
    if err != nil {
        log.Fatalf("Failed to communicate to redis-server @ %v", err)
    }
}()
rh.SetRedigoClient(conn)
fmt.Println("Executing Example_JSONSET for Redigo Client")
Example_JSONSet(rh)

// GoRedis Client
cli := goredis.NewClient(&goredis.Options{Addr: *addr})
defer func() {
    if err := cli.FlushAll(context.Background()).Err(); err != nil {
        log.Fatalf("goredis - failed to flush: %v", err)
    }
    if err := cli.Close(); err != nil {
        log.Fatalf("goredis - failed to communicate to redis-server: %v", err)
    }
}()
rh.SetGoRedisClient(cli)
fmt.Println("\nExecuting Example_JSONSET for Redigo Client")
Example_JSONSet(rh)

}

We use cookies. If you continue to browse the site, you agree to the use of cookies. For more information on our use of cookies please see our Privacy Policy.