Skip to content

Commit d926814

Browse files
committed
perf: use gob instaed of json
1 parent fbe97a4 commit d926814

4 files changed

Lines changed: 39 additions & 16 deletions

File tree

cache-map-redis.go

Lines changed: 32 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
package gofnext
22

33
import (
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 {

decorator.go

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
11
package gofnext
22

33
import (
4+
"bytes"
45
"context"
5-
"encoding/json"
6+
"encoding/gob"
67
"reflect"
78
"sync"
89
"time"
@@ -352,7 +353,9 @@ checkCache:
352353

353354
// 3.1 check if marshal needed
354355
if hasCache && c.cacheMap.NeedMarshal() {
355-
err2 := json.Unmarshal(value.([]byte), &retv)
356+
// err2 := json.Unmarshal(value.([]byte), &retv)
357+
dec := gob.NewDecoder(bytes.NewBuffer(value.([]byte)))
358+
err2 := dec.Decode(&retv)
356359
if err == nil {
357360
err = err2
358361
}

gofnext_pg

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
Subproject commit 9270418f130ea096097d96de86c8499360508ea5
1+
Subproject commit 0f8928923e78fb62f532747dba8ed62e335a3740

version

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
v0.1.2
1+
v0.1.3

0 commit comments

Comments
 (0)