golang,go,博客,开源,编程

认识gocache

Published on with 0 views and 0 comments

GoCache 是一个简单、高效的 Go 语言缓存库,用于在内存中存储和管理缓存数据。它提供了类似于 Memcached 的缓存功能,支持设置缓存的过期时间和自动清除失效的缓存。GoCache 的设计目标是简单易用,并能够满足大多数普通缓存需求。

主要特性:

  1. 内存缓存GoCache 只会将数据保存在内存中,因此非常适合用作高效的内存缓存。
  2. 过期时间:可以为缓存设置默认的过期时间,缓存一旦过期,会被自动删除。
  3. 自动清理失效缓存:内建的清理机制会定期扫描并移除过期的缓存。
  4. 并发安全GoCache 线程安全,可以在多个 goroutine 中并发使用。
  5. 存储灵活:它允许为缓存数据指定自定义的过期时间,且支持设置无过期时间的永久缓存。
  6. 容量控制:支持最大缓存容量,缓存达到容量限制时可以根据策略(如 LRU)进行淘汰。

安装:

要使用 GoCache,可以通过 go get 命令安装:

go get github.com/patrickmn/go-cache

主要功能:

  1. 设置缓存:可以设置带有过期时间的缓存,缓存可以是任意类型(如字符串、数字、结构体等)。
  2. 获取缓存:从缓存中获取数据,支持检查缓存是否存在。
  3. 删除缓存:可以根据键删除缓存,也可以删除所有缓存。
  4. 清理失效缓存:定期清理已过期的缓存。
  5. 缓存数量:可以设置缓存的最大容量,超出时会自动清理。

使用示例:

1. 初始化和设置缓存

package main

import (
    "fmt"
    "github.com/patrickmn/go-cache"
    "time"
)

func main() {
    // 创建一个缓存实例,过期时间为 5 分钟,清理间隔为 10 分钟
    c := cache.New(5*time.Minute, 10*time.Minute)

    // 设置一个缓存值,key 为 "foo",value 为 "bar",默认过期时间
    c.Set("foo", "bar", cache.DefaultExpiration)

    // 获取缓存值
    val, found := c.Get("foo")
    if found {
        fmt.Println("Found:", val)
    } else {
        fmt.Println("Not Found")
    }
}

2. 使用自定义过期时间设置缓存

package main

import (
    "fmt"
    "github.com/patrickmn/go-cache"
    "time"
)

func main() {
    c := cache.New(5*time.Minute, 10*time.Minute)

    // 设置缓存,指定过期时间为 1 分钟
    c.Set("baz", "qux", 1*time.Minute)

    // 获取缓存
    val, found := c.Get("baz")
    if found {
        fmt.Println("Found:", val)
    } else {
        fmt.Println("Not Found")
    }
}

3. 删除缓存

package main

import (
    "fmt"
    "github.com/patrickmn/go-cache"
    "time"
)

func main() {
    c := cache.New(5*time.Minute, 10*time.Minute)

    // 设置缓存
    c.Set("foo", "bar", cache.DefaultExpiration)

    // 删除缓存
    c.Delete("foo")

    // 尝试获取缓存
    val, found := c.Get("foo")
    if found {
        fmt.Println("Found:", val)
    } else {
        fmt.Println("Not Found") // 输出: Not Found
    }
}

4. 删除所有缓存

package main

import (
    "fmt"
    "github.com/patrickmn/go-cache"
    "time"
)

func main() {
    c := cache.New(5*time.Minute, 10*time.Minute)

    // 设置缓存
    c.Set("foo", "bar", cache.DefaultExpiration)
    c.Set("baz", "qux", cache.DefaultExpiration)

    // 删除所有缓存
    c.Flush()

    // 尝试获取缓存
    val, found := c.Get("foo")
    if found {
        fmt.Println("Found:", val)
    } else {
        fmt.Println("Not Found") // 输出: Not Found
    }
}

配置项:

  • New(defaultExpiration, cleanupInterval):创建一个新的缓存实例,defaultExpiration 是缓存项的默认过期时间,cleanupInterval 是清理过期缓存的时间间隔。
  • Set(key, value, expiration):设置缓存项,key 为缓存的键,value 为缓存的值,expiration 是缓存过期的时间。如果 expirationcache.DefaultExpiration,则使用默认过期时间。
  • Get(key):获取缓存项的值,如果该项不存在,返回 false
  • Delete(key):删除指定的缓存项。
  • Flush():清除所有缓存项。

特点总结:

  • 简单易用GoCache 的 API 设计非常简洁,易于上手,适合缓存处理简单的场景。
  • 线程安全:支持在并发环境中安全地使用,适合高并发的 Web 应用。
  • 过期自动清理:能够自动清理过期缓存,减少内存占用。
  • 可配置性:可以配置缓存的过期时间和清理策略,灵活应对不同需求。

适用场景:

  • 会话缓存:对于 Web 应用,可以用它存储用户会话数据,设置适当的过期时间。
  • API 缓存:缓存 API 的结果,避免重复计算和频繁的数据库查询。
  • 数据缓存:对于数据库查询结果或计算结果,可以用缓存加速访问。

总的来说,GoCache 是一个轻量级且功能强大的缓存解决方案,适用于需要内存缓存的场景,能够帮助提高应用的响应速度和性能。


标题:认识gocache
作者:mooncakeee
地址:http://blog.dd95828.com/articles/2025/01/06/1736154630031.html
联系:scotttu@163.com