bigcache缓存

BigCache是一个高性能的内存缓存库,它具有以下特点:
1. 高性能:BigCache使用分段锁策略,允许多个Goroutine并发读取而不需要锁定整个缓存,从而在高并发环境下保持高性能 。
2. 低内存消耗:通过预分配内存块和缓冲区,避免过多的内存分配和垃圾回收,优化了内存使用 。
3. 并发安全:BigCache在读取操作上支持并发,允许多个Goroutine同时访问缓存 。
4. 过期策略:支持设置缓存项的过期时间,过期的缓存项将在后续访问时被清除 。
5. LRU替换策略:使用LRU(最近最少使用)的缓存替换策略,确保缓存项保持最新和最频繁使用的数据 。
6. 内存分配优化:BigCache将条目保留在堆上,但省略了GC,通过操作字节片来实现,需要缓存前的条目(反)序列化 。
7. 数据分片存储:通过数据分片降低锁冲突并提升并发量,每个分片称为一个shard,通过key的hash值取余来定位 。
8. FIFO式的内存结构设计:BigCache遵循FIFO原则,新增数据直接追加到队列中,简化了内存设计逻辑 。
9. 细节优化:BigCache在细节上进行了大量性能优化,例如使用varint减小数据量,buffer内存复用,自行实现fnv Hash等 。
10. 序列化问题:由于BigCache设计为处理大量数据,序列化和反序列化在大多数用例中是必需的 。
11. 配置灵活:BigCache提供了丰富的配置选项,如shard数量、生命周期窗口、清理间隔、最大条目数量和大小等 。
12. 不处理哈希冲突:当新插入的项目与已存储项目的哈希值冲突时,新项目会覆盖旧值 。
13. 与Freecache的比较:BigCache与Freecache都旨在减少GC开销,但BigCache不需要事先知道缓存的大小,并且在达到最大大小时可以分配额外的内存,而不是像Freecache那样覆盖现有条目 。
BigCache的设计目标是处理大量元素的同时保持高性能,适合需要快速响应和高吞吐量的场景。

BigCache是一个用于Go语言的高性能内存缓存库。以下是使用BigCache的一个简单示例:
首先,你需要安装BigCache库。可以使用以下命令来安装:
go get -u github.com/allegro/bigcache/v3
然后,你可以使用以下Go代码来初始化BigCache并使用它:
package main

import (
    "context"
    "fmt"
    "github.com/allegro/bigcache/v3"
)

func main() {
    // 使用默认配置创建BigCache实例
    // DefaultConfig提供了一个合理的默认配置
    cache, err := bigcache.New(context.Background(), bigcache.DefaultConfig(10*time.Minute))
    if err != nil {
        panic(err)
    }

    // 设置一个唯一的键和对应的值
    const myUniqueKey = "my-unique-key"
    cache.Set(myUniqueKey, []byte("some value"))

    // 从缓存中获取值
    entry, err := cache.Get(myUniqueKey)
    if err != nil {
        fmt.Println("Error while fetching from cache:", err)
        return
    }
    fmt.Println("Value from cache:", string(entry))
}
在这个示例中,我们首先导入了必要的包,并定义了 main 函数。然后,我们创建了一个BigCache实例,使用 bigcache.DefaultConfig 函数和一个过期时间(这里是10分钟)来配置缓存。接下来,我们使用 Set 方法将一个键值对添加到缓存中,然后使用 Get 方法来检索这个值。
请注意,BigCache存储的是字节切片( []byte ),因此你需要将你的数据序列化为字节切片,或者直接使用字节切片作为值。在上面的示例中,我们简单地将一个字符串转换为字节切片来存储在缓存中。
此外,BigCache提供了许多配置选项,允许你自定义缓存的行为,例如设置清理间隔、最大条目数量、最大条目大小等。这些配置可以在创建BigCache实例时通过 bigcache.Config 结构进行设置。
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

leijmdas

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值