内存缓存使用

概述

本章节主要介绍 cache 的使用。

准备条件

  1. 完成 golang 安装

创建

  1. NewCache
  1. 函数签名:
  2. NewCache func(expire time.Duration, opts ...CacheOption) (*Cache, error)
  3. 说明:
  4. 创建 cache 对象。
  5. 入参:
  6. 1. expire: 过期时间
  7. 2. opts: 操作选项
  8. 2.1 WithLimit: 设置 cache 存储数据数量上限
  9. 2.2 WithName: 设置 cache 名称,输出日志时会打印
  10. 返回值:
  11. 1. *Cache: cache对象
  12. 2. error: 创建结果

方法说明

  1. Set

    1. 函数签名:
    2. Set func(key string, value interface{})
    3. 说明:
    4. 添加值到缓存。
    5. 入参:
    6. 1. key: key
    7. 2. value:
    8. 示例:
    9. cache, err := NewCache(time.Second*2, WithName("any"))
    10. if err != nil {
    11. log.Fatal(err)
    12. }
    13. cache.Set("first", "first element")
  2. SetWithExpire

    1. 函数签名:
    2. SetWithExpire func(key string, value interface{}, expire time.Duration)
    3. 说明:
    4. 添加值到缓存, 同时指定过期时间
    5. 入参:
    6. 1. key: key
    7. 2. value:
    8. 3. expire: 过期时间
    9. 示例:
    10. cache, err := NewCache(time.Second*2, WithName("any"))
    11. if err != nil {
    12. log.Fatal(err)
    13. }
    14. cache.SetWithExpire("first", "first element", time.Second)
  3. Get

    1. 函数签名:
    2. Get func(key string) (interface{}, bool)
    3. 说明:
    4. 查询缓存
    5. 入参:
    6. 1. key: key
    7. 返回值:
    8. 1. interface{}: value
    9. 2. bool: 是否存在
    10. 示例:
    11. cache, err := NewCache(time.Second*2, WithName("any"))
    12. if err != nil {
    13. log.Fatal(err)
    14. }
    15. cache.Set("first", "first element")
    16. v, exist := cache.Get("first")
    17. if !exist {
    18. // deal with not exist
    19. }
    20. value, ok := v.(string)
    21. if !ok {
    22. // deal with type error
    23. }
    24. // use value
  4. Del

    1. 函数签名:
    2. Del func(key string)
    3. 说明:
    4. 删除缓存。
    5. 入参:
    6. 1. key: key
    7. 示例:
    8. cache, err := NewCache(time.Second*2, WithName("any"))
    9. if err != nil {
    10. log.Fatal(err)
    11. }
    12. cache.Del("first")
  5. Take

    1. 函数签名:
    2. Take funcTake(key string, fetch func() (interface{}, error)) (interface{}, error)
    3. 说明:
    4. 获取缓存,如果缓存中存在,则返回缓存中的值,如果缓存不存在,则执行 fetch 函数的返回结果。
    5. 入参:
    6. 1. key: key
    7. 2. fetch: 自定义返回结果
    8. 示例:
    9. cache, err := NewCache(time.Second*2, WithName("any"))
    10. if err != nil {
    11. log.Fatal(err)
    12. }
    13. v, err := cache.Take("first", func() (interface{}, error) {
    14. return "first element", nil
    15. })
    16. println(v) // output: first element
    17. cache.Set("first", "first element 2")
    18. v, err = cache.Take("first", func() (interface{}, error) {
    19. return "first element", nil
    20. })
    21. println(v) // // output: first element 2