当前位置: 首页 > 软件库 > 程序开发 > 缓存系统 >

BigCache

基于 Go 的高效缓存
授权协议 Apache
开发语言 Google Go
所属分类 程序开发、 缓存系统
软件类型 开源软件
地区 不详
投 递 者 羊舌航
操作系统 跨平台
开源组织
适用人群 未知
 软件概览

BigCache 是用于在 Go 中写入千兆字节数据的高效缓存。快速,并发,逐行扫描内存缓存,以保持大量条目,而不影响性能。 BigCache 在堆上保留条目,但为它们省略了 GC。 要实现对字节数组的操作,因此在大多数用例中将需要在高速缓存前面进行条目(de)序列化。

使用

简单初始化

import "github.com/allegro/bigcache"

cache, _ := bigcache.NewBigCache(bigcache.DefaultConfig(10 * time.Minute))

cache.Set("my-unique-key", []byte("value"))

entry, _ := cache.Get("my-unique-key")
fmt.Println(string(entry))

自定义初始化

import (
	"log"

	"github.com/allegro/bigcache"
)

config := bigcache.Config {
		// number of shards (must be a power of 2)
		Shards: 1024,
		// time after which entry can be evicted
		LifeWindow: 10 * time.Minute,
		// rps * lifeWindow, used only in initial memory allocation
		MaxEntriesInWindow: 1000 * 10 * 60,
		// max entry size in bytes, used only in initial memory allocation
		MaxEntrySize: 500,
		// prints information about additional memory allocation
		Verbose: true,
		// cache will not allocate more memory than this limit, value in MB
		// if value is reached then the oldest entries can be overridden for the new ones
		// 0 value means no size limit
		HardMaxCacheSize: 8192,
		// callback fired when the oldest entry is removed because of its
		// expiration time or no space left for the new entry. Default value is nil which
		// means no callback and it prevents from unwrapping the oldest entry.
		OnRemove: nil,
	}

cache, initErr := bigcache.NewBigCache(config)
if initErr != nil {
	log.Fatal(initErr)
}

cache.Set("my-unique-key", []byte("value"))

if entry, err := cache.Get("my-unique-key"); err == nil {
	fmt.Println(string(entry))
}
  • 前言 BigCache作为一个知名的本地存储库,其本身存在着很多巧妙的设计理念与实现,本系列将从源码入手,一步一步做出解析,希望感兴趣的可以共勉。 NewBigCache() 该函数位于bigcache/bigcache.go内 NewBigCache函数作为BigCache的实例化函数,作用是根据给定的配置返回一个cahce实例,可以直接自定义bigcache的Config结构体,也可以使用默认

  • bigcache 快速,并发,退出内存中的高速缓存被写入,以保留大量条目,而不会影响性能。 BigCache将条目保留在堆上,但省略了它们的GC。 为此,需要对字节片进行操作,因此在大多数使用情况下,需要在缓存前面进行条目(反序列化)。 Requires Go 1.12 or newer. 原理 bigcache几个核心的数据结构: leftWindown hasher cacheShard :s

  • bigcache 官方文档     https://godoc.org/github.com/allegro/bigcache bigcache 导入     import "github.com/allegro/bigcache" bigcache 是用于在go中写入千兆字节数据的高效缓存。快速、并发、逐行扫描内存缓存,以保持大量条目,而不影响性能。 例程 package main impor

  • BigCache type BigCache struct { shards []*cacheShard //分片 lifeWindow uint64 //过期时间 clock clock //时间获取的方法 hash Hasher //hash算法 config Config //配置文件 shardMask

  • 几天前,我读了一篇关于BigCache的文章,我对它是如何做到以下两点十分感兴趣: 加速并发访问 避免高额的GC开销 于是我去阅读了它的代码。我觉得它的做法很赞,所以我写了这篇文章来与你分享。 BigCache 是一个快速,支持并发访问,自淘汰的内存型缓存,可以在存储大量元素时依然保持高性能。BigCache将元素保存在堆上却避免了GC的开销。 —— 摘自《BigCache README 中的简介

 相关资料
  • 问题内容: 我正在寻找一个高效的Swing Java组件,可以将其插入应用程序UI。我已经尝试使用Swing中的类,例如JTextArea,但是没有用;它们根本不够高性能,并且具有任何严重的缺点。此外,如果它具有标准的控制台功能,如滚动锁定,清晰的控制台,颜色等,那就太好了。 编辑:忘了说了,这个控制台将有很多调试信息流入其中,并且它需要完全可滚动。 克里斯,干杯 问题答案: 我看不到使用JTex

  • 安装jieba分词工具 在https://pypi.python.org/pypi/jieba/下载jieba-0.38.zip 解压后执行: python setup.py install 试验切词效果 创建testjieba.py文件内容如下: # coding:utf-8 #!/usr/local/bin/python import jieba seg_list = jieba.cut(

  • 我的Spring应用程序由两个上下文xml配置文件组成,第一个是根上下文。xml仅扫描非控制器带注释的bean: 而第二个servlet上下文。xml包含所有spring mvc设置和扫描控制器带注释的bean web.xml上的DispatcherServlet配置如下所示 我想尝试基于注释的缓存,所以我将以下bean定义添加到root-context.xml 并使用一个带有注释的类来测试这一点

  • 问题内容: 下面的Go代码读取10,000条记录的CSV(时间戳和浮点数),对数据进行一些操作,然后将原始值以及的附加列写入到另一个CSV中。但是,它的运行速度非常慢(例如,数小时,但大部分时间是),我很好奇我可以处理的CSV读取/写入是否效率低下。 我正在寻求帮助,以使此CSV读/写模板代码尽快。对于此问题的范围,我们不必担心该方法。 问题答案: 您先将文件加载到内存中,然后再对其进行处理,这对

  • 问题内容: 我有一个非常大的XML文件,需要将其转换为另一个XML文件,并且我想使用XSLT做到这一点。我对内存优化而不是速度优化更感兴趣(尽管速度也不错!)。 您将推荐使用哪个基于Java的XSLT处理器? 您是否会推荐其他方法(非XSLT,非Java?),如果可以,为什么? 问题中的XML文件很大,但不是很深-有数百万行(元素),但只有大约3个级别。 问题答案: 目前,只有三个 已知的XSLT

  • 我相信,明智地使用Hibernate的二级缓存可以很好地提高我的应用程序的性能,为此,我已经开始从internet和Hibernate课程学习它。虽然关于二级缓存及其工作方式有很多很好的解释,但我的目标是从我没有找到的具体问题开始,准确地了解事物的工作方式,因此我将问一些关于Hibernate缓存的一般问题,特别是关于二级缓存的问题。 A、 我很乐意回答问题,即使有些问题看起来很明显或无关紧要 >