Skip to content

Garnet 是一个具有新的线程可扩展系统架构的缓存存储系统。Garnet 的网络、处理和存储(内存和磁盘/云)层都是从头开始设计的。我们选择 RESP API 是出于方便考虑,因为它在社区中被广泛采用。Garnet 并不打算成为 Redis 的百分之百完美的直接替代品,而应该被视为一个足够接近的目标,以确保您关心的功能的兼容性。Garnet 可以在许多未经修改的 Redis 客户端中正常工作(我们特使用 StackExchange.Redis 对 Garnet 进行了很好地测试),因此使用非常简单。

Garnet 目前支持的 API 调用列表在这里维护。以下我们重点介绍一些可能不兼容的特定非 API 相关选择。这个列表并不详尽,而是作为一个广泛的指南,指出您在使用 Garnet 时可能遇到的差异。

  1. Garnet 是多线程的,MSET 不是原子的。要获得原子版本的 MSET,您需要将其转换为事务(存储过程)。
  2. Garnet 不支持 Redis 的函数或模块。相反,它有自己的基于 C# 的可扩展机制,针对高性能和易用性进行了优化。
  3. Garnet 不支持 Lua 脚本。我们有一个试验版本,但是从实际效果来看还是太慢,因此我们没有将其添加到项目中。
  4. Garnet 遵循请求-响应的 FIFO 顺序。但是,当与大于内存的数据一起使用时,并且如果您选择使用散列版本的 IO(使用 EnableScatterGatherGet [--sg-get] 选项)以增加磁盘性能,则即使结果仍然按 FIFO 顺序返回,读取操作可能会在同一输入操作序列中以较早的写操作的顺序乱序执行。
  5. 当 Garnet 在仅追加文件 (AOF) 打开的情况下使用时,默认情况下服务器在成功返回给用户之前不会等待提交。您可以使用 WaitForCommit [--aof-commit-wait] 选项进行调整,而提交的频率可以使用 CommitFrequencyMs [--aof-commit-freq] 选项进行调整。
  6. 如果您的工作负载仅包含原始字符串操作,您可以使用 DisableObjects [--no-obj] 选项禁用对象存储。存储层默认情况下是禁用的,您可以使用 EnableStorageTier [--storage-tier] 选项启用它。您可以使用 DisablePubSub [--no-pubsub] 选项禁用发布-订阅功能。