原文作者:Agang
今天来说下gobox中的simplecache和levelcache
simplecache提供了一个简单的内存kv
1package main
2import (
3 "github.com/goinbox/crypto"
4 "github.com/goinbox/simplecache"
5 "fmt"
6 "time"
7 "strconv"
8)
9func main() {
10 sc := simplecache.NewSimpleCache()
11 for i := 0; i < 10000; i++ {
12 key := crypto.Md5String([]byte(strconv.Itoa(i)))
13 sc.Set(key, i, 3*time.Second)
14 v, ok := sc.Get(key)
15 if !ok || v != i {
16 fmt.Println(v, ok)
17 }
18 }
19 time.Sleep(4 * time.Second)
20 allKeysExpires := true
21 for i := 0; i < 10000; i++ {
22 key := crypto.Md5String([]byte(strconv.Itoa(i)))
23 v, ok := sc.Get(key)
24 if ok || v == i {
25 fmt.Println(v, ok)
26 allKeysExpires = false
27 }
28 }
29 if allKeysExpires {
30 fmt.Println("all keys have expired")
31 }
32}
1all keys have expired
1、在使用时,如果set的值是引用类型,那么改变引用的对象的值时,cache中的内容也会改变,这一点要特别注意。
2、因为是内存cache,所以进程退出则cache内容全部丢失。
levelcache以leveldb为底层存储引擎,提供了一个单机落盘的kv。
1package main
2import (
3 "github.com/goinbox/levelcache"
4 "fmt"
5 "time"
6)
7func main() {
8 cache, _ := levelcache.NewCache("/tmp/levelcache_test", 5*time.Second)
9 key := []byte("k1")
10 value := []byte("v1")
11 cache.Set(key, value, 3)
12 value, _ = cache.Get(key)
13 sv := string(value)
14 fmt.Println(sv)
15 if sv != "v1" {
16 fmt.Println("set get error")
17 }
18 time.Sleep(4 * time.Second)
19 v, err := cache.Get(key)
20 sv = string(v)
21 fmt.Println(sv, err)
22}
1v1
2 <nil>
cache会存储在单机磁盘上,不是分布式的。
欢迎大家使用,使用中有遇到问题随时反馈,我们会尽快响应,谢谢!
版权申明:内容来源网络,版权归原创者所有。除非无法确认,我们都会标明作者及出处,如有侵权烦请告知,我们会立即删除并表示歉意。谢谢。