github.com/songzhibin97/gkit@v1.2.13/cache/local_cache/example_test.go (about) 1 package local_cache 2 3 import ( 4 "log" 5 6 "github.com/songzhibin97/gkit/cache/buffer" 7 ) 8 9 var ch Cache 10 11 func ExampleNewCache() { 12 // 默认配置 13 // ch = NewCache() 14 15 // 可供选择的配置选项 16 17 // 设置间隔时间 18 // SetInternal(interval time.Duration) 19 20 // 设置默认的超时时间 21 // SetDefaultExpire(expire time.Duration) 22 23 // 设置周期的执行函数,默认(不设置)是扫描全局清除过期的k 24 // SetFn(fn func()) 25 26 // 设置触发删除后的捕获函数, 数据删除后回调用设置的捕获函数 27 // SetCapture(capture func(k string, v interface{})) 28 29 // 设置初始化存储的成员对象 30 // SetMember(m map[string]Iterator) 31 32 ch = NewCache(SetInternal(1000), 33 SetDefaultExpire(10000), 34 SetCapture(func(k string, v interface{}) { 35 log.Println(k, v) 36 })) 37 } 38 39 func ExampleCacheStorage() { 40 // Set 添加cache 无论是否存在都会覆盖 41 ch.Set("k1", "v1", DefaultExpire) 42 43 // SetDefault 无论是否存在都会覆盖 44 // 偏函数模式,默认传入超时时间为创建cache的默认时间 45 ch.SetDefault("k1", 1) 46 47 // SetNoExpire 48 // 偏函数模式,默认传入超时时间为永不过期 49 ch.SetNoExpire("k1", 1.1) 50 51 // Add 添加cache 如果存在的话会抛出异常 52 err := ch.Add("k1", nil, DefaultExpire) 53 CacheErrExist(err) // true 54 55 // Replace 如果有就设置没有就抛出错误 56 err = ch.Replace("k2", make(chan struct{}), DefaultExpire) 57 CacheErrNoExist(err) // true 58 } 59 60 func ExampleGet() { 61 // Get 根据key获取 cache 保证有效期内的kv被取出 62 v, ok := ch.Get("k1") 63 if !ok { 64 // v == nil 65 } 66 _ = v 67 68 // GetWithExpire 根据key获取 cache 并带出超时时间 69 v, t, ok := ch.GetWithExpire("k1") 70 if !ok { 71 // v == nil 72 } 73 // 如果超时时间是 NoExpire t.IsZero() == true 74 if t.IsZero() { 75 // 没有设置超时时间 76 } 77 78 // Iterator 返回 cache 中所有有效的对象 79 mp := ch.Iterator() 80 for s, iterator := range mp { 81 log.Println(s, iterator) 82 } 83 84 // Count 返回member数量 85 log.Println(ch.Count()) 86 } 87 88 func ExampleIncrement() { 89 ch.Set("k3", 1, DefaultExpire) 90 ch.Set("k4", 1.1, DefaultExpire) 91 // Increment 为k对应的value增加n n必须为数字类型 92 err := ch.Increment("k3", 1) 93 if CacheErrExpire(err) || CacheErrExist(CacheTypeErr) { 94 // 未设置成功 95 } 96 _ = ch.IncrementFloat("k4", 1.1) 97 98 // 如果你知道设置的k的具体类型 还可以使用类型确定的 increment函数 99 // ch.IncrementInt(k string, v int) 100 // ... 101 // ch.IncrementFloat32(k string, v flot32) 102 // ... 103 104 // Decrement 同理 105 } 106 107 func ExampleDelete() { 108 // Delete 如果设置了 capture 会触发不或函数 109 ch.Delete("k1") 110 111 // DeleteExpire 删除所有过期了的key, 默认的 capture 就是执行 DeleteExpire() 112 ch.DeleteExpire() 113 } 114 115 func ExampleChangeCapture() { 116 // 提供了在运行中改变捕获函数的方法 117 // ChangeCapture 118 ch.ChangeCapture(func(k string, v interface{}) { 119 log.Println(k, v) 120 }) 121 } 122 123 func ExampleSaveLoad() { 124 // 写入文件采用go独有的gob协议 125 126 io := buffer.NewIoBuffer(1000) 127 128 // Save 传入一个 w io.Writer 参数 将 cache中的 member 成员写入w中 129 _ = ch.Save(io) 130 131 // SaveFile 传入path 写到文件中 132 _ = ch.SaveFile("path") 133 134 // Load 传入一个 r io.Reader对象 从 r中读取写回到 member中 135 _ = ch.Load(io) 136 137 // LoadFile 传入path 读取文件内容 138 _ = ch.LoadFile("path") 139 } 140 141 func ExampleFlush() { 142 // Flush 释放member成员 143 ch.Flush() 144 } 145 146 func ExampleShutdown() { 147 // Shutdown 释放对象 148 _ = ch.Shutdown() 149 }