11package gofnext
22
33import (
4- "encoding/json"
4+ "bytes"
5+ "encoding/gob"
56 "errors"
67 "hash/fnv"
78 "strconv"
@@ -108,26 +109,41 @@ func (m *redisMap) strkey(key any) string {
108109 return r
109110}
110111
111- func (m * redisMap ) Store (key , value any , err error ) {
112+ func (m * redisMap ) Store (key , value any , err0 error ) {
113+ buf := & bytes.Buffer {}
114+ if err := gob .NewEncoder (buf ).Encode (value ); err != nil {
115+ slogger .Error ("gofnext.redisMap" , "err" , err .Error ())
116+ return
117+ }
118+
112119 pkey := m .strkey (key )
113- data , _ := json .Marshal (value )
120+ // data, _ := json.Marshal(value)
114121 cacheData := redisData {
115- Data : data ,
122+ Data : buf . Bytes () ,
116123 // TTL: m.ttl,
117124 }
118- if err != nil && m .errTtl <= 0 {
125+ if err0 != nil && m .errTtl <= 0 {
126+ // do not cache error
119127 return
120128 }
121129 if m .ttl > 0 || m .errTtl >= 0 {
122130 cacheData .CreatedAt = time .Now ()
123131 }
124- if err != nil {
125- cacheData .Err = []byte (err .Error ())
132+ if err0 != nil {
133+ cacheData .Err = []byte (err0 .Error ())
126134 }
127- val , _ := json .Marshal (cacheData )
128- err = m .redisClient .HSet (m .redisFuncKey , pkey , val ).Err ()
135+
136+ // encode value to bytes
137+ buf = & bytes.Buffer {}
138+ if err := gob .NewEncoder (buf ).Encode (cacheData ); err != nil {
139+ slogger .Error ("gofnext.redisMap" , "err" , err .Error ())
140+ return
141+ }
142+ // val, _ := json.Marshal(cacheData)
143+ val := buf .Bytes ()
144+ err := m .redisClient .HSet (m .redisFuncKey , pkey , val ).Err ()
129145 if err != nil {
130- slogger .Warn ("gofnext.redisMap" , "err" , err .Error ())
146+ slogger .Error ("gofnext.redisMap" , "err" , err .Error ())
131147 }
132148}
133149
@@ -145,10 +161,14 @@ func (m *redisMap) Load(key any) (value any, hasCache, alive bool, err error) {
145161 return
146162 }
147163 cacheData := redisData {}
148- err = json . Unmarshal ( val , & cacheData )
149- if err != nil {
164+ if err = gob . NewDecoder ( bytes . NewReader ( val )). Decode ( & cacheData ); err != nil {
165+ slogger . Error ( "gofnext.redisMap" , " err" , err . Error ())
150166 return
151167 }
168+ // err = json.Unmarshal(val, &cacheData)
169+ // if err != nil {
170+ // return
171+ // }
152172
153173 value = cacheData .Data
154174 if cacheData .Err != nil {
0 commit comments