cache

package module
v0.13.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Apr 25, 2024 License: MIT Imports: 3 Imported by: 18

README

cache

codecov PkgGoDev Go version License

通用的缓存接口

目前支持以下组件:

名称 状态
memory 内存 memory
memcached <github.com/bradfitz/gomemcache> memcache
redis <github.com/redis/go-redis> memcache
// memory
c, _ := memory.New(...)
c.Set("number", 1)
var v int
c.Get("number",&v)
print(v)

// memcached
c = memcache.New("localhost:11211")
c.Set("number", 1)
c.Get("number", &v)
print(v)

安装

go get github.com/issue9/cache

版权

本项目采用 MIT 开源授权许可证,完整的授权说明可在 LICENSE 文件中找到。

Documentation

Overview

Package cache 统一的缓存系统接口

Index

Constants

View Source
const Forever = 0

Forever 永不过时

Variables

This section is empty.

Functions

func ErrCacheMiss

func ErrCacheMiss() error

ErrCacheMiss 当不存在缓存项时返回的错误

func Get added in v0.12.0

func Get[T any](cache Cache, key string) (T, error)

Get cache.Get 的泛型版本

func GetOrInit added in v0.11.0

func GetOrInit[T any](cache Cache, key string, v *T, ttl time.Duration, init func() (T, error)) error

GetOrInit 获取缓存项

在缓存不存在时,会尝试调用 init 初始化,并调用 [Cache.Set] 存入缓存。

key 和 v 相当于调用 [Cache.Get] 的参数; 如果 [Cache.Get] 返回 ErrCacheMiss,那么将调用 init 方法初始化值并写入缓存, 最后再调用 [Cache.Get] 返回值。

Types

type Cache

type Cache interface {
	// Get 获取缓存项
	//
	// 当前不存在时,返回 [ErrCacheMiss] 错误。
	// key 为缓存项的唯一 ID;
	// v 为缓存写入的地址,应该始终为指针类型;
	//
	// NOTE: 不能正确获取由 [Cache.Counter] 设置的值,[Cache.Counter]
	// 的实现是基于缓存系统原生的功能,存储方式与当前的实现可能是不同的。
	Get(key string, v any) error

	// Set 设置或是添加缓存项
	//
	// key 表示保存该数据的唯一 ID;
	// val 表示保存的数据对象,如果是结构体,则会调用 gob 包进行序列化。
	// ttl 表示过了该时间,缓存项将被回收。如果该值为 [Forever],该值永远不会回收。
	Set(key string, val any, ttl time.Duration) error

	// Delete 删除一个缓存项
	//
	// 如果该项目不存在,则返回 nil。
	Delete(string) error

	// Exists 判断一个缓存项是否存在
	Exists(string) bool

	// Counter 返回计数器操作接口
	//
	// val 和 ttl 表示在该计数器不存在时,初始化的值以及回收时间。
	Counter(key string, val uint64, ttl time.Duration) Counter
}

Cache 缓存内容的访问接口

func Prefix added in v0.3.0

func Prefix(a Cache, p string) Cache

Prefix 生成一个带有统一前缀名称的缓存访问对象

c := memory.New(...)
p := cache.Prefix(c, "prefix_")
p.Get("k1") // 相当于 c.Get("prefix_k1")

type Cleanable added in v0.7.0

type Cleanable interface {
	Cache

	// Clean 清除所有的缓存内容
	Clean() error
}

Cleanable 可清除所有缓存内容的接口

type Counter added in v0.7.0

type Counter interface {
	// Incr 增加计数并返回增加后的值
	Incr(uint64) (uint64, error)

	// Decr 减少数值并返回减少后的值
	Decr(uint64) (uint64, error)

	// Value 返回该计数器的当前值
	Value() (uint64, error)

	// Delete 删除当前的计数器
	//
	// 当计数器不存在时,不应该返回错误。
	Delete() error
}

Counter 计数器需要实现的接口

Cache 支持自定义的序列化接口,但是对于自增等纯数值操作, 各个缓存服务都实现自有的快捷操作,无法适用自定义的序列化。

由 Counter 设置的值,可能无法由 [Cache.Get] 读取到正确的值, 但是可以由 [Cache.Exists]、[Cache.Delete] 和 [Cache.Set] 进行相应的操作。

各个驱动对自增值的类型定义是不同的, 只有在 [0, math.MaxInt32) 范围内的数值是安全的。

type Driver added in v0.7.0

type Driver interface {
	Cleanable

	// Close 关闭客户端
	Close() error

	// Driver 关联的底层驱动实例
	Driver() any
}

Driver 所有缓存驱动需要实现的接口

对于数据的序列化相关操作可直接调用 [caches.Marshal] 和 [caches.Unmarshal] 进行处理。 新的驱动可以采用 github.com/issue9/cache/cachetest 对接口进行测试,看是否符合要求。

Directories

Path Synopsis
Package caches 内置的缓存接口实现
Package caches 内置的缓存接口实现
Package cachetest 缓存的测试用例
Package cachetest 缓存的测试用例
Package locales 提供了本地化的内容
Package locales 提供了本地化的内容

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL