跳到主要内容

API 兼容性

Garnet 是一个缓存存储,具有全新的线程可扩展系统架构。Garnet 的网络、处理和存储(内存和磁盘/云)层都是从头开始设计的。鉴于 RESP API 在社区中的广泛采用,我们选择它只是为了方便。Garnet 并非旨在 100% 完美地替代 Redis,而应将其视为一个足够接近的起点,以确保您关注的功能的兼容性。Garnet 可以与许多 Redis 客户端无修改地协同工作(我们特别测试了 Garnet 与 StackExchange.Redis 的良好配合),因此入门非常容易。

Garnet 目前支持的 API 调用列表在此维护。下面我们重点介绍可能不兼容的特定非 API 相关选择。此列表并非详尽无遗,它旨在作为您在使用 Garnet 时可能遇到的差异的广泛指导。

  1. Garnet 是多线程的,因此 MSET 不是原子的。对于原子版本的 MSET,您需要将其表示为事务(存储过程)。这很容易修复,类似于此处MSETNX,如果您希望 MSET 默认具有原子语义,请在问题中告知我们。
  2. Garnet 不支持 Redis 模块。相反,它有自己基于 C# 的可扩展性机制,这些机制经过优化,可实现极高的性能、线程可扩展性、安全性和易用性。
  3. Garnet 现在完全支持高效的 Lua 脚本。您可以使用 --lua 开关启用 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] 选项禁用发布-订阅功能。