Redis rejson extension built upon go-redis
go get github.com/dxtrleague/rejonson
import "github.com/dxtrleague/rejonson"
Extends go-redis client with all ReJSON abilities, so you can use directly the rejson client for all redis usage and commands.
// go redis client
goRedisClient := redis.NewClient(&redis.Options{
Addr: "localhost:6379",
})
client := rejonson.ExtendClient(goRedisClient)
defer client.Close()
arr := []interface{}{"hello", "world", 1, map[string]interface{}{"key": 12}}
js, err := json.Marshal(arr)
if err != nil {
// handle
}
// redis "native" command
client.Set("go-redis-cmd", "hello", time.Second)
// rejson command
client.JsonSet("rejson-cmd", ".", string(js))
// int command
arrLen, err := client.JsonArrLen("rejson-cmd", ".").Result()
if err != nil {
// handle
}
fmt.Printf("Array length: %d", arrLen)
// Output: Array length: 4
Client will also return extended Pipeline
and TXPipeline
goRedisClient := redis.NewClient(&redis.Options{
Addr: "localhost:6379",
})
client := rejonson.ExtendClient(goRedisClient)
pipeline := client.Pipeline()
pipeline.JsonSet("rejson-cmd-pipeline", ".", "[10]")
pipeline.JsonNumMultBy("rejson-cmd-pipeline", "[0]", 10)
pipeline.Set("go-redis-pipeline-command", "hello from go-redis", time.Second)
_, err := pipeline.Exec()
if err != nil {
// handle error
}
jsonString, err := client.JsonGet("rejson-cmd-pipeline").Result()
if err != nil {
// handle error
}
fmt.Printf("Array %s", jsonString)
// Output: Array [100]
Rejonson implements all the methods as described at ReJson Commands except for JSON.DEBUG
and JSON.RESP
.
The args will be serialized to redis directly so make sure to read ReJSON command docs
All the rejson methods starts with the prefix of Json
e.g JsonDel
, JsonArrIndex
, JsonMGet
.
Each command returns specific go-redis.Cmder
by the specific request.
Due to some ReJSON bug - #issue-76, some empty strings will be ignored.
Rejonson depends only on go-redis. The testing also depends on assert library.
Rejonson tests must use real redis with ReJson to run
It is recommended to run the unit tests when using rejonson.
The unit tests will make sure your go-redis
version is compatible and your rejson
plugin supports all the methods and working as expected.
The testing library depends on assert library
Apache 2.0
For any question or contribution, feel free to open an issue.