25
25
EnableExpiredHook () Gache
26
26
Foreach (context.Context , func (string , interface {}, int64 ) bool ) Gache
27
27
Get (string ) (interface {}, bool )
28
+ GetWithExpire (string ) (interface {}, int64 , bool )
28
29
Read (io.Reader ) error
29
30
Set (string , interface {})
30
31
SetDefaultExpire (time.Duration ) Gache
@@ -91,14 +92,6 @@ func (v *value) isValid() bool {
91
92
return v .expire <= 0 || fastime .UnixNanoNow () <= v .expire
92
93
}
93
94
94
- func (v * value ) Val () interface {} {
95
- return v .val
96
- }
97
-
98
- func (v * value ) Expire () time.Duration {
99
- return * (* time .Duration )(unsafe .Pointer (& v .expire ))
100
- }
101
-
102
95
// SetDefaultExpire set expire duration
103
96
func (g * gache ) SetDefaultExpire (ex time.Duration ) Gache {
104
97
atomic .StoreInt64 (& g .expire , * (* int64 )(unsafe .Pointer (& ex )))
@@ -197,28 +190,40 @@ func ToRawMap(ctx context.Context) map[string]interface{} {
197
190
}
198
191
199
192
// get returns value & exists from key
200
- func (g * gache ) get (key string ) (interface {}, bool ) {
193
+ func (g * gache ) get (key string ) (interface {}, int64 , bool ) {
201
194
v , ok := g .shards [xxhash .Sum64 (* (* []byte )(unsafe .Pointer (& key )))& 0xFF ].Load (key )
202
195
203
196
if ! ok {
204
- return nil , false
197
+ return nil , 0 , false
205
198
}
206
199
207
200
if d := v .(value ); d .isValid () {
208
- return d .val , true
201
+ return d .val , d . expire , true
209
202
}
210
203
211
204
g .expiration (key )
212
- return nil , false
205
+ return nil , 0 , false
213
206
}
214
207
215
208
// Get returns value & exists from key
216
209
func (g * gache ) Get (key string ) (interface {}, bool ) {
217
- return g .get (key )
210
+ v , _ , ok := g .get (key )
211
+ return v , ok
218
212
}
219
213
220
214
// Get returns value & exists from key
221
215
func Get (key string ) (interface {}, bool ) {
216
+ v , _ , ok := instance .get (key )
217
+ return v , ok
218
+ }
219
+
220
+ // GetWithExpire returns value & expire & exists from key
221
+ func (g * gache ) GetWithExpire (key string ) (interface {}, int64 , bool ) {
222
+ return g .get (key )
223
+ }
224
+
225
+ // GetWithExpire returns value & expire & exists from key
226
+ func GetWithExpire (key string ) (interface {}, int64 , bool ) {
222
227
return instance .get (key )
223
228
}
224
229
@@ -344,7 +349,7 @@ func (g *gache) Write(ctx context.Context, w io.Writer) error {
344
349
mu .Lock ()
345
350
m [key ] = v
346
351
mu .Unlock ()
347
- gob .Register (v . Val () )
352
+ gob .Register (val )
348
353
return true
349
354
})
350
355
return gb .Encode (m )
@@ -364,7 +369,7 @@ func (g *gache) Read(r io.Reader) error {
364
369
}
365
370
for k , v := range m {
366
371
if v .isValid () {
367
- g .Set (k , v .Val () )
372
+ g .Set (k , v .val )
368
373
}
369
374
}
370
375
return nil
0 commit comments