1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495 |
- package redisjson
- import (
- "encoding/json"
- "fmt"
- "log"
- "bp.365521.xyz/BP/redis_v2/redis"
- "github.com/nitishm/go-rejson"
- //"github.com/nitishm/go-rejson/v4/rjs"
- )
- type RedisJsonUtil struct {
- Rh *rejson.Handler
- GoRedis *redis.GoRedis
- }
- func NewRedisJsonUtil(opt interface{}) (r *RedisJsonUtil) {
- r = &RedisJsonUtil{}
- r.GoRedis = &redis.GoRedis{}
- r.GoRedis.Init(opt)
- r.Rh = rejson.NewReJSONHandler()
- r.Rh.SetGoRedisClient(r.GoRedis.CMap[r.GoRedis.DB]) //暂不考虑集群
- return
- }
- //保存对象
- func (r *RedisJsonUtil) Save(coll string, obj interface{}) {
- id := r.GetId(coll)
- if m, ok := obj.(map[string]interface{}); ok { //map时增加id元素
- m["_id"] = id
- obj = m
- }
- res, err := r.Rh.JSONSet(fmt.Sprintf("%s:%d", coll, id), ".", obj)
- log.Println(id, res, err)
- }
- //保存对象
- func (r *RedisJsonUtil) SaveByKey(key string, obj interface{}) {
- res, err := r.Rh.JSONSet(key, ".", obj)
- log.Println(key, res, err)
- }
- //根据Id获取对象
- /*
- 注:使用JSONGet获取汉字的byte数据缺失,中文乱码,改用原生的方法获取
- 又修改为克隆到本地进行修改复制、替换
- */
- func (r *RedisJsonUtil) FindById(coll string, id int64, val interface{}) {
- res, err := r.Rh.JSONGet(fmt.Sprintf("%s:%d", coll, id), ".")
- if err == nil {
- bs, ok := res.([]byte)
- if ok {
- json.Unmarshal(bs, val)
- }
- } else {
- log.Println(res, err)
- }
- return
- // aa := r.GoRedis.CMap[r.GoRedis.DB].Do(r.GoRedis.Ctx, "JSON.GET", "user:4", ".").String()
- // json.Unmarshal(res.([]byte), &v)
- // b := res.([]byte)
- // for len(b) > 0 {
- // r, n := utf8.DecodeRune(b) // 解码 b 中的第一个字符
- // fmt.Printf("%c\n", r) // 显示读出的字符
- // b = b[n:] // 丢弃已读取的字符
- // }
- }
- func (r *RedisJsonUtil) Find(key string) interface{} {
- // tg := rjs.GETOptionNOESCAPE
- // tg.SetValue("TRUE")
- res, err := r.Rh.JSONGet(key, ".") //, tg)
- if err != nil {
- log.Println(res, err) //<nil> redis: nil
- }
- return res
- }
- func (r *RedisJsonUtil) DelByKey(key string) {
- res, err := r.Rh.JSONDel(key, ".")
- log.Println(res, err)
- }
- func (r *RedisJsonUtil) Update(key, path string, val interface{}) {
- res, err := r.Rh.JSONSet(key, path, val)
- log.Println(res, err)
- }
- func (r *RedisJsonUtil) GetId(coll string) int64 {
- id, _ := r.GoRedis.Incr("coll:" + coll)
- return id
- }
|