modulepackage
0.0.0-20240116075921-8a888b1ed558
Repository: https://github.com/codingcaius/geecache.git
Documentation: pkg.go.dev
# README
GeeCache 仿 groupcache 实现的⼀个分布式缓存,使用gRPC进行通信,用etcd作为服务注册与发现, 并添加了Get 和 Set 接口,及 TTL 机制。
已添加的功能:
- 使用gRPC进行节点间通信,并使用etcd作为服务注册与发现
- 提供了数据更新(Set)和删除(Remove)的⽀持
- 加⼊缓存过期机制
- 基于Logrus实现的日志库可以充分利用Logrus提供的丰富功能,包括结构化日志、多级别支持等
# Packages
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
# Functions
No description provided by the author
返回一个 Sink 实例,用于填充 ByteView.
从全局的缓存组池中移除指定名称的缓存组.
用来特定名称的 Group,这里使用了只读锁 RLock(),因为不涉及任何冲突变量的写操作 GetGroup 返回先前使用 NewGroup 创建的命名组, 如果没有这样的组则为 nil GetGroup 获取对应的 命名空间.
No description provided by the author
用于创建一个协调的、具备组意识的 Getter 对象。 NewGroup 用于创建一个 Group 对象,该对象实现了缓存组的协同工作。 newGroup 函数接受四个参数,其中第四个参数是 PeerPicker 接口的实例,用于选择对等节点。在 NewGroup 中,此参数被设为 nil,表示没有指定对等节点选择器。.
NewServer 创建cache的svr 若addr为空 则使用defaultAddr.
No description provided by the author
RegisterNewGroupHook 注册一个每次创建组时运行的钩子。.
注册 peer 初始化函数 在创建第一个缓存组时调用,确保只调用一次 要么调用 RegisterPeerPicker,要么调用 RegisterPerGroupPeerPicker,但不能两者都调用。 如果 portPicker 已经被赋值(不为 nil),则抛出 panic,防止重复调用。否则,将 portPicker 赋值为 传入的 peer 初始化函数,并返回该函数。.
注册 带有组名参数的 peer 初始化函数 在创建第一个缓存组时调用,确保只调用一次 要么调用 RegisterPeerPicker,要么调用 RegisterPerGroupPeerPicker,但不能两者都调用 如果 portPicker 已经被赋值(不为 nil),则抛出 panic,防止重复调用。否则,将 portPicker 赋值为传入的带有组名参数的 peer 初始化函数,并返回该函数.
RegisterServerStart 注册一个在创建第一个组时运行的钩子。.
SetLogger - 这是为了提供与 logrus 的向后兼容性而遗留的。.
SetLoggerFromLogger 将 logger 设置为 实现了 Logger 接口的实例 允许使用不同的日志库,只要它实现了 Logger 接口,而不仅仅局限于 logrus.
StringSink 返回一个实现了 Sink 接口的对象.
No description provided by the author
# Variables
NowFunc 返回当前时间,LRU 使用该时间来确定该值是否已过期。 这可以通过测试来覆盖,以确保项目在过期时被驱逐。 NowFunc 被初始化为 time.Now,即获取当前系统时间的函数.
# Structs
A ByteView holds an immutable view of bytes.
CacheStats 存储缓存信息的结构体,函数返回的缓存数据由该结构体表示.
ErrNotFound 应该从 `GetterFunc` 的实现中返回,以指示请求的值不可用。 当进行远程 HTTP 调用以从其他 groupcache 实例检索值时,返回此错误将向 groupcache 指示请求的值不可用,并且不应尝试在本地调用“GetterFunc”。.
当远程的 GetterFunc 返回错误时,group.Get() 会返回 ErrRemoteCall,表示在远程获取值时发生了错误。 在这种情况下,group.Get()不会尝试通过本地的GetterFunc检索该值。.
一个 Group 可以认为是一个缓存的命名空间,每个 Group 拥有一个唯一的名称 name。 比如可以创建三个 Group,缓存学生的成绩命名为 scores,缓存学生信息的命名为 info,缓存学生课程的命名为 courses A Group 是一个缓存命名空间,加载的相关数据分布在一组或多台机器上。.
LogrusLogger 是 Logger 的一个实现.
在某些情况下,系统无法找到任何可用的 peer NoPeers is an implementation of PeerPicker that never finds a peer.
用于记录 groupcache 缓存组的统计信息的结构体.
# Interfaces
Getter 加载键的数据.
Logger 是一个最小的接口,允许我们使用结构化记录器,包括(但不限于)logrus。.
PeerPicker是定位必须实现的接口 拥有特定密钥的对等点。 PeerPicker 定义了用于定位拥有特定键的 peer 的方法,以及获取所有 peers 的方法.
ProtoGetter 是每个 peer 必须实现的接口。 ProtoGetter 定义了 peer 必须实现的一组方法,这些方法用于获取、删除和设置缓存项,以及获取 peer 的 URL.
Sink 从 Get 调用接收数据。
如果 Getter 接口定义了 SetString、SetBytes、SetProto 这样的方法, 那么在成功获取到数据后,实现类应该调用其中的一个方法,将获取到的数据设置到缓存中。 这样做的好处是,下次相同的请求可以直接从缓存中获取数据,而不需要再次去获取远程数据, 减轻了对远程资源的访问压力,提高了性能和效率。
`e` 设置一个可选的未来时间,该时间将在该时间到期。 如果您不想过期,请传递零值 `time.Time`(例如,`time.Time{}`)。.
# Type aliases
int64 类型的别名,用于在并发环境下安全地进行原子操作.
CacheType 表示一种缓存类型。.
GetterFunc 用函数实现 Getter。.