赞
赏
cache2go 是一个用 Go 语言 实现的并发安全的缓存库,实现了如下特性:
这个库代码量很少,核心代码就三个文件,里面设计的技术点主要包括 读写锁、 goroutine、 map 操作等。
Cache2go 的源码结构比较简单,一共就四个文件,分别为:cache.go,cacheitem.go,cachetable.go 和 errors.go 文件,目录结构如下:
这里的文件就这上面三个,examples 文件夹里面存放的是使用的实例,因此,不属于项目的源代码范畴。其中 cache.go 里面主要是一个 Cache 接口,通过该接口可以创建一个 Cache 对象。
cacheitem.go 里面主要存放了一个 CacheItem 结构,以及其对应的方法,而 cachetable.go 里面主要存放了一个 CacheTable 结构,以及其对应的方法。
最后的 errors.go 文件,定义了一些常用的错误信息。
Cache2go 的源码的数据结构主要涉及到三个,分别为 Cache,CacheTable 和 CacheItem,它们之间的关系如下图所示:
我们可以看出,一个 Cache 里面可以通过 name 关联多个 CacheTable,同时一个 CacheTable 可以通过 key 关联多个 CacheItem。
接口 | 说明 |
---|---|
Cache() | 返回已经存在的给定名称的缓存表,类型为 *CacheTable ,如果不存在,则创建一个新的缓存表。 |
Add() | 向缓存表添加新的 key/value 对。可以同时指定该 key 的过期时间。如果为 0,则表示一直有效。 |
Value() | 根据 key 返回缓存中对应的 value ,类型为 *CacheItem 。如果 key 存在,则同时更新它的访问计数和最后访问时间;如果不存在,则尝试调用事先注册的回调函数 loadData 初始化数据到缓存表。 |
Delete() | 从缓存表中删除指定 key 。 |
Exists() | 检查 key 是否存在于缓存中, 存在返回 true 。不会更新缓存项的最后访问时间。 |
Foreach() | 遍历缓存,对每个缓存项,调用自定义的回调函数进行处理。 |
SetDataLoader() | 针对缓存设置数据加载回调函数,用于从缓存检索不存在的 key 时自动从其他地方如数据库、文件加载该 key/value 对到缓存中。 |
SetAddedItemCallback() | 针对缓存设置新增 key/value 对到缓存时自动触发的回调函数。 |
SetAboutToDeleteItemCallback() | 针对缓存设置删除 key 时自动触发的回调函数。 |
SetAboutToExpireCallback() | 针对特定的 key 设置过期提醒回调函数。 |
一个 Cache 里面可以通过 name 关联多个 CacheTable,同时一个 CacheTable 可以通过 key 关联多个 CacheItem。