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  }