Garnet 是微软研究院推出的新型远程缓存存储,具有多项独特优势:
本仓库包含构建和运行 Garnet 的代码。如需更多信息和文档,请访问我们的网站 https://microsoft.github.io/garnet%E3%80%82
正在寻找完全托管服务? https://microsoft.github.io/garnet/docs/azure/overview 提供 Garnet 作为完全托管、企业级缓存解决方案,具备内置高可用性、性能保证和零基础设施管理。
Garnet 实现了广泛的 API,包括原始字符串(例如 gets、sets 和键过期)、分析型(例如 HyperLogLog 和 Bitmap)以及对象型(例如有序集合和列表)操作。它可以处理多键事务,形式包括客户端 RESP 事务以及我们自己的 C# 服务器端存储过程和模块。用户可以在 C# 中方便且安全地为原始字符串和自定义对象类型定义自定义操作,降低了开发自定义扩展的门槛。Garnet 还支持 Lua 脚本。
Garnet 采用快速且可插拔的网络层,支持未来扩展(如利用内核绕过栈)。它使用 .NET 强大的 SslStream 库支持安全的传输层安全(TLS)通信,并提供基本访问控制。Garnet 的存储层名为 Tsavorite,专为高性能构建,包含强大的数据库特性,如线程可扩展性、分层存储支持(内存、SSD 和云存储)、快速非阻塞 checkpoint、恢复、用于持久性的操作日志、多键事务支持以及更好的内存管理和重用。最后,Garnet 支持集群操作模式,支持分片、复制和动态键迁移。
我们在 https://microsoft.github.io/garnet/docs/benchmarking/overview 上展示了一些关键结果,将 Garnet 与领先的开源缓存存储进行了比较。
Garnet 的设计重新思考了整个缓存存储栈——从网络接收数据包,到解析和处理数据库操作,再到执行存储交互。我们基于多年的 https://microsoft.github.io/garnet/docs/research/papers 构建。以下是 Garnet 的整体架构。
Garnet 的网络层基于共享内存设计,TLS 处理和存储交互在网络 IO 完成线程上执行,避免了常见情况下的线程切换开销。这种方法利用 CPU 缓存一致性将数据传递到处理逻辑,而非传统的基于 shuffle 的网络设计(需要将数据移动到服务器上的相应分片)。
Garnet 的存储设计包含两个 Tsavorite 键值存储,它们的命运由统一的操作日志绑定。第一个存储称为“主存储”(main store),针对原始字符串操作进行优化,并仔细管理内存以避免垃圾回收。第二个(可选的)“对象存储”(object store)针对复杂对象和自定义数据类型进行优化,包括有序集合(Sorted Set)、集合(Set)、哈希(Hash)、列表(List)和地理空间(Geo)等常用类型。对象存储中的数据类型利用 .NET 库生态系统进行当前实现。它们在内存中以堆的形式存储(使更新非常高效),并在磁盘上以序列化形式存储。未来,我们计划研究使用统一索引和日志以简化维护。
Garnet 设计的一个显著特点是其窄腰 Tsavorite 存储 API,用于在其上实现庞大、丰富且可扩展的 RESP API 表面。该 API 包括读取(read)、更新插入(upsert)、删除(delete)和原子读写修改(read-modify-write)操作,并通过异步回调实现,使 Garnet 能够在每个操作的不同阶段插入逻辑。我们的存储 API 模型允许将 Garnet 的解析和查询处理关注点与并发、存储分层和 checkpoint 等存储细节清晰分离。Garnet 对多键事务使用两阶段锁定。
除了单节点执行外,Garnet 还具备全功能集群模式,允许用户创建和管理分片与复制部署。Garnet 还支持高效的动态键迁移方案以重新平衡分片。用户可以使用标准 Redis 集群命令创建和管理 Garnet 集群,节点通过 gossip 协议共享和更新集群状态。Garnet 的集群模式设计目前是 被动的:这意味着它不实现 leader 选举,仅响应用户提供的 控制平面 发出的集群命令;详情参见 https://microsoft.github.io/garnet/docs/cluster/overview#control-plane%E3%80%82
请访问我们的 https://microsoft.github.io/garnet 网站,或直接跳至 https://microsoft.github.io/garnet/docs/getting-started 或 https://microsoft.github.io/garnet/docs/welcome/releases 部分。
本项目基于 MIT 许可证 授权,详见 LICENSE 文件。
隐私信息可在 [***] 查看。
本项目欢迎贡献和建议。大多数贡献要求您同意贡献者许可协议(CLA),声明您有权并实际授予我们使用您贡献的权利。详情请访问 [***]
提交拉取请求(pull request)时,CLA 机器人将自动确定您是否需要提供 CLA,并对 PR 进行相应标记(例如状态检查、评论)。只需按照机器人提供的说明操作即可。在所有使用我们 CLA 的仓库中,您只需执行一次此操作。
本项目采用 Microsoft 开源行为准则。如需更多信息,请参阅 行为准则常见问题,或通过 *** 联系我们提出其他问题或意见。
本项目可能包含项目、产品或服务的商标或徽标。Microsoft 商标或徽标的授权使用受 Microsoft 商标和品牌指南 约束,且必须遵循该指南。在本项目的修改版本中使用 Microsoft 商标或徽标不得引起混淆或暗示 Microsoft 的赞助。任何第三方商标或徽标的使用均受第三方政策约束。
Redis 是 Redis Ltd. 的注册商标。其所有权利归 Redis Ltd. 所有。Microsoft 对其的任何使用仅为参考目的,不表示 Redis 与 Microsoft 之间存在任何赞助、认可或关联关系。
探索更多轩辕镜像的使用方法,找到最适合您系统的配置方式
通过 Docker 登录认证访问私有仓库
无需登录使用专属域名
Kubernetes 集群配置 Containerd
K3s 轻量级 Kubernetes 镜像加速
VS Code Dev Containers 配置
Podman 容器引擎配置
HPC 科学计算容器配置
ghcr、Quay、nvcr 等镜像仓库
Harbor Proxy Repository 对接专属域名
Portainer Registries 加速拉取
Nexus3 Docker Proxy 内网缓存
需要其他帮助?请查看我们的 常见问题Docker 镜像访问常见问题解答 或 提交工单
docker search 限制
站内搜不到镜像
离线 save/load
插件要用 plugin install
WSL 拉取慢
安全与 digest
新手拉取配置
镜像合规机制
不支持 push
manifest unknown
no matching manifest(架构)
invalid tar header(解压)
TLS 证书失败
DNS 超时
域名连通性排查
410 Gone 排查
402 与流量用尽
401 认证失败
429 限流
D-Bus 凭证提示
413 与超大单层
来自真实用户的反馈,见证轩辕镜像的优质服务