Skip to content

๐Ÿš go-fast-cache is a high-speed, thread-safe, key-value caching system. All data is kept in memory.

Notifications You must be signed in to change notification settings

daqnext/go-fast-cache

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

29 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

go-fast-cache

go-fast-cache is a high-speed, thread-safe, key-value caching system. All data is kept in memory.

All expired data will be removed by background go-routine automatically.

usage

//import
import (
    localcache "github.com/daqnext/go-fast-cache"
)
//new instance
//new a localcache instance with default config
//DefaultDeleteExpireIntervalSecond(Schedule job for delete expired key interval) is 5 seconds
//DefaultCountLimit(Max key-value pair count) is 1000,000

log, err := locallog.New(path_util.GetAbsPath("logs"), 2, 20, 30)
if err != nil {
    panic(err.Error())
}
lc := localcache.New(log)

//set
//Set(key string, value interface{}, ttlSecond int64)
//ttlSecond should >0, MaxTTL is 7200sec(2 hour)
lc.Set("foo", "bar", 300)
lc.Set("a", 1, 300)
lc.Set("b", Person{"Jack", 18}, 300)
lc.Set("b*", &Person{"Jack", 18}, 300)
lc.Set("c", true, 100)

//get
//Get(key string) (value interface{}, ttl int64, exist bool)
value, ttlLeft, exist := lc.Get("foo")
if exist {
    valueStr, ok := value.(string) //value type is interface{}, please convert to the right type before use
    log.Println("key:foo",",valuestr:",valueStr,",typeok:",ok,",ttlLeft:",ttlLeft)
}

//get
log.Println("---get---")
log.Println(lc.Get("foo"))
log.Println(lc.Get("a"))
log.Println(lc.Get("b"))
log.Println(lc.Get("b*"))
log.Println(lc.Get("c"))

//delete
lc.Delete("a")
lc.Delete("b")

//overwrite
log.Println("---set overwrite ---")
log.Println(lc.Get("c"))
lc.Set("c", false, 60)
log.Println(lc.Get("c"))

custom DeleteExpireIntervalSecond and key-value pair CountLimit

//new instance
log, err := locallog.New(path_util.GetAbsPath("logs"), 2, 20, 30)
if err != nil {
    panic(err.Error())
}
lc,err := localcache.NewWithInterval(20,log) //custom schedule job interval(second) for delete expired key
if err != nil {
    panic(err.Error())
}
lc.SetCountLimit(10000) //custom the max key-value pair count

key-value pair count over limit

If the key-value pair reach DefaultCountLimit : 15% of the oldest expired key-value will be deleted automatically by background routine asap.

Default limit

MaxTTLSecond: 7200 seconds(2 hours)

DefaultCountLimit:1000000
MinCountLimit:10000

MaxDeleteExpireIntervalSecond:300 seconds
DefaultDeleteExpireIntervalSecond:5 seconds

Benchmark

set

cpu: Intel(R) Core(TM) i7-7700HQ CPU @ 2.80GHz
BenchmarkLocalCache_SetPointer
BenchmarkLocalCache_SetPointer-8   	 1000000	      1618 ns/op	     379 B/op	      10 allocs/op
PASS

get

cpu: Intel(R) Core(TM) i7-7700HQ CPU @ 2.80GHz
BenchmarkLocalCache_GetPointer
BenchmarkLocalCache_GetPointer-8   	 9931429	       129.7 ns/op	       0 B/op	       0 allocs/op
PASS

About

๐Ÿš go-fast-cache is a high-speed, thread-safe, key-value caching system. All data is kept in memory.

Topics

Resources

Stars

Watchers

Forks

Packages

No packages published

Languages