@@ -12,19 +12,19 @@ import (
12
12
13
13
type Options ezblob.Options
14
14
15
- type Database struct {
15
+ type KV struct {
16
16
blob * ezblob.Blob
17
17
lock * sync.RWMutex
18
18
data map [string ]string
19
19
}
20
20
21
- // Open create an instance and load existed data / 创建一个实例并载入已有的数据
22
- func Open (ctx context.Context , opts Options ) (db * Database , err error ) {
21
+ // Open create an instance and load existed data
22
+ func Open (ctx context.Context , opts Options ) (db * KV , err error ) {
23
23
var blob * ezblob.Blob
24
24
if blob , err = ezblob .New (ezblob .Options (opts )); err != nil {
25
25
return
26
26
}
27
- db = & Database {
27
+ db = & KV {
28
28
blob : blob ,
29
29
lock : & sync.RWMutex {},
30
30
data : map [string ]string {},
@@ -37,41 +37,36 @@ func Open(ctx context.Context, opts Options) (db *Database, err error) {
37
37
return
38
38
}
39
39
} else {
40
- var gr * gzip.Reader
41
- if gr , err = gzip .NewReader (bytes .NewReader (buf )); err != nil {
42
- return
43
- }
44
- if err = gob .NewDecoder (gr ).Decode (& db .data ); err != nil {
40
+ if err = db .unmarshal (buf ); err != nil {
45
41
return
46
42
}
47
43
}
48
44
return
49
45
}
50
46
51
- // Put set a key-value / 设置一个键值对
52
- func (db * Database ) Put (key string , val string ) {
47
+ // Put set a key-value
48
+ func (db * KV ) Put (key string , val string ) {
53
49
db .lock .Lock ()
54
50
defer db .lock .Unlock ()
55
51
db .data [key ] = val
56
- return
57
52
}
58
53
59
- // Get retrieve value by key / 读取一个值
60
- func (db * Database ) Get (key string ) string {
54
+ // Get retrieve value by key
55
+ func (db * KV ) Get (key string ) string {
61
56
db .lock .RLock ()
62
57
defer db .lock .RUnlock ()
63
58
return db .data [key ]
64
59
}
65
60
66
- // Del delete a value by key / 移除一个值
67
- func (db * Database ) Del (key string ) {
61
+ // Del delete a value by key
62
+ func (db * KV ) Del (key string ) {
68
63
db .lock .Lock ()
69
64
defer db .lock .Unlock ()
70
65
delete (db .data , key )
71
66
}
72
67
73
- // Purge iterate all entries and determine whether to delete / 遍历所有键值对,并决定是否移除某个键值
74
- func (db * Database ) Purge (fn func (key string , val string ) (del bool , stop bool )) {
68
+ // Purge iterate all entries and determine whether to delete
69
+ func (db * KV ) Purge (fn func (key string , val string ) (del bool , stop bool )) {
75
70
db .lock .Lock ()
76
71
defer db .lock .Unlock ()
77
72
for k , v := range db .data {
@@ -83,13 +78,27 @@ func (db *Database) Purge(fn func(key string, val string) (del bool, stop bool))
83
78
return
84
79
}
85
80
}
81
+ }
82
+
83
+ func (db * KV ) unmarshal (buf []byte ) (err error ) {
84
+ db .lock .Lock ()
85
+ defer db .lock .Unlock ()
86
+
87
+ var gr * gzip.Reader
88
+ if gr , err = gzip .NewReader (bytes .NewReader (buf )); err != nil {
89
+ return
90
+ }
91
+
92
+ if err = gob .NewDecoder (gr ).Decode (& db .data ); err != nil {
93
+ return
94
+ }
86
95
return
87
96
}
88
97
89
- // Serialize marshal internal data / 序列化内部数据
90
- func (db * Database ) Serialize () (data []byte , err error ) {
98
+ func (db * KV ) marshal () (data []byte , err error ) {
91
99
db .lock .RLock ()
92
100
defer db .lock .RUnlock ()
101
+
93
102
buf := & bytes.Buffer {}
94
103
gw := gzip .NewWriter (buf )
95
104
if err = gob .NewEncoder (gw ).Encode (& db .data ); err != nil {
@@ -102,10 +111,10 @@ func (db *Database) Serialize() (data []byte, err error) {
102
111
return
103
112
}
104
113
105
- // Save persist data to kubernetes / 将内部数据保存到 Kubernetes
106
- func (db * Database ) Save (ctx context.Context ) (err error ) {
114
+ // Save persist data to kubernetes
115
+ func (db * KV ) Save (ctx context.Context ) (err error ) {
107
116
var buf []byte
108
- if buf , err = db .Serialize (); err != nil {
117
+ if buf , err = db .marshal (); err != nil {
109
118
return
110
119
}
111
120
if err = db .blob .Save (ctx , buf ); err != nil {
0 commit comments