跳到主要内容

Garnet 配置

如何配置 Garnet

Garnet 服务器(GarnetServer.exe)可以使用配置文件(例如 garnet.confredis.conf)进行配置,而命令行参数可以覆盖文件中指定的任何设置。任何未在配置文件或命令行参数中指定的设置都将设置为 defaults.conf 文件中指定的默认值(此文件的路径可以通过命令行参数覆盖)。

Garnet 目前支持两种配置文件格式:

  1. garnet.conf 文件格式(默认)- JSON 格式的设置集合
  2. redis.conf 文件格式 - Redis 配置文件格式的设置集合
    keyword argument1 argument2 argument3 ... argumentN
    请参阅 Redis 文档作为参考。重要提示:并非所有 redis.conf 关键字都在 Garnet 中受支持。为了获得完整的配置设置覆盖,请使用 garnet.conf 格式。

可以通过命令行参数指定配置文件路径(和默认文件路径)。

  1. 对于 garnet.conf
    GarnetServer.exe --config-import-path <file-path>
  2. 对于 redis.conf
    GarnetServer.exe --config-import-path <file-path> --config-import-format RedisConf

注意:要更改默认配置文件的路径(和/或格式),请分别使用 config-default-import-pathconfig-default-import-format 关键字。

garnet.conf

Garnet 的默认配置文件格式,支持 Garnet 可配置设置的全部范围。 garnet.conf 是一个 JSON 格式的文件,包含一组配置设置。有关所有可用设置,请参阅 defaults.conf 文件或查阅完整的 Garnet 设置列表

redis.conf

Garnet 支持 redis.conf 文件格式作为配置文件。请注意,并非所有 redis.conf 关键字都受支持。请参阅以下支持的 redis.conf 关键字列表:

redis.conf 关键字garnet.conf 关键字注意事项
bindbind仅使用第一个地址
portport
maxmemorymemory
logfilefile-logger
loglevellogger-level
dircheckpointdir
requirepasspassword
aclfileacl-file
cluster-enabledcluster
cluster-node-timeoutcluster-timeout
tls-porttls用于指示是否应使用 TLS 的值,否则端口号将被忽略
tls-cert-filecert-file-nameGarnet 目前使用 .pfx 文件和密码支持 TLS,而 Redis 使用 .crt 和 .key 文件支持 TLS。要在使用 redis.conf 的同时在 Garnet 中使用 TLS,请将您的证书转换为 .pfx 格式(请参阅安全部分中的详细信息),然后使用 .pfx 文件路径作为 tls-cert-file 值。如果创建原始证书时使用了密码,请在 tls-key-file-pass 参数中指定它,就像在 Redis 中那样(或通过 --cert-password 命令行参数)。启动服务器时,如果适用,请使用 --cert-subject-name 命令行参数设置证书主题名称。
tls-key-filecert-password请参阅 tls-cert-file 注释
tls-auth-clientsclient-certificate-required请参阅 tls-cert-file 注释
latency-trackinglatency-monitor
io-threadsnumthreads
repl-diskless-sync-delayreplica-sync-delay

命令行参数

Garnet 中的任何设置也可以通过指定命令行参数进行配置。如果设置也在配置文件中指定,它将被命令行中指定的值覆盖。有关所有可用命令行设置,请运行 GarnetServer.exe -hGarnetServer.exe -help,或查阅完整的 Garnet 设置列表

可配置设置

garnet.conf
关键字
命令行关键字类型有效值描述
Port--portint范围内的整数
[0, 65535]
运行服务器的端口
Address--bind字符串v4/v6 格式的 IP 地址绑定服务器的 IP 地址(默认:任何)
MemorySize-m
--memory
字符串内存大小日志使用的总内存,以字节为单位(向下取整到 2 的幂)
PageSize-p
--page
字符串内存大小每个页面的大小,以字节为单位(向下取整到 2 的幂)
SegmentSize-s
--segment
字符串内存大小磁盘上每个日志段的大小,以字节为单位(向下取整到 2 的幂)
IndexSize-i
--index
字符串内存大小哈希索引的起始大小,以字节为单位(向下取整到 2 的幂)
IndexMaxSize--index-max-size字符串内存大小哈希索引的最大大小,以字节为单位(向下取整到 2 的幂)
MutablePercent--mutable-percentint保持可变的日志内存百分比
EnableReadCache--readcachebool启用读缓存以加快对磁盘记录的访问
ReadCacheMemorySize--readcache-memory字符串内存大小读缓存日志使用的总内存,以字节为单位(向下取整到 2 的幂)
ReadCachePageSize--readcache-page字符串内存大小每个读缓存页面的大小,以字节为单位(向下取整到 2 的幂)
ObjectStoreHeapMemorySize--obj-heap-memory字符串内存大小对象存储堆内存大小,以字节为单位(堆中所有对象实例占用的总大小)
ObjectStoreLogMemorySize--obj-log-memory字符串内存大小对象存储日志内存使用量,以字节为单位(仅包含对堆对象的引用的日志大小,不包括日志中引用的对象本身消耗的堆内存大小)
ObjectStorePageSize--obj-page字符串内存大小每个对象存储页面大小,以字节为单位(向下取整到 2 的幂)
ObjectStoreSegmentSize--obj-segment字符串内存大小磁盘上每个对象存储日志段的大小,以字节为单位(向下取整到 2 的幂)
ObjectStoreIndexSize--obj-index字符串内存大小对象存储哈希索引的起始大小,以字节为单位(向下取整到 2 的幂)
ObjectStoreIndexMaxSize--obj-index-max-size字符串内存大小对象存储哈希索引的最大大小,以字节为单位(向下取整到 2 的幂)
ObjectStoreMutablePercent--obj-mutable-percentint保持可变的对象存储日志内存百分比
EnableObjectStoreReadCache--obj-readcachebool启用对象存储读缓存以加快对磁盘记录的访问
ObjectStoreReadCacheLogMemorySize--obj-readcache-log-memory字符串内存大小对象存储读缓存日志使用的总内存,以字节为单位(向下取整到 2 的幂)
ObjectStoreReadCachePageSize--obj-readcache-page字符串内存大小每个对象存储读缓存页面大小,以字节为单位(向下取整到 2 的幂)
ObjectStoreReadCacheHeapMemorySize--obj-readcache-heap-memory字符串内存大小对象存储读缓存堆内存大小,以字节为单位(堆中所有对象实例占用的总大小)
EnableStorageTier--storage-tierbool启用记录(混合日志)到存储的分层,以支持大于内存的存储。使用 --logdir 指定存储目录。
CopyReadsToTail--copy-reads-to-tailbool当从主存储的内存中不可变区域或存储设备读取记录时,将其复制到日志的尾部。
ObjectStoreCopyReadsToTail--obj-copy-reads-to-tailbool当从对象存储的内存中不可变区域或存储设备读取记录时,将其复制到日志的尾部。
LogDir-l
--logdir
字符串分层记录(混合日志)的存储目录,如果启用了存储分层(--storage-tier)。如果未指定,则使用当前目录。
CheckpointDir-c
--checkpointdir
字符串检查点的存储目录。如果未指定,则使用 logdir。
Recover-r
--recover
bool如果存在,则从最新的检查点和日志中恢复。
DisablePubSub--no-pubsubbool禁用服务器上的发布/订阅功能。
EnableIncrementalSnapshots--incsnapbool启用增量快照。
PubSubPageSize--pubsub-pagesize字符串内存大小用于发布/订阅的日志页面大小(向下取整到 2 的幂)
DisableObjects--no-objbool禁用对数据结构对象的支持。
EnableCluster--clusterbool启用集群。
CleanClusterConfig--clean-cluster-configbool使用干净的集群配置启动。
AuthenticationMode--authGarnetAuthenticationModeNoAuth, Password, Aad, ACLGarnet 的认证模式。这会影响 AUTH 命令的处理方式以及客户端如何针对 Garnet 进行认证。可选值:NoAuth、Password、Aad、ACL
Password--password字符串密码认证的认证字符串。
ClusterUsername--cluster-username字符串用于集群内通信认证的用户名。
ClusterPassword--cluster-password字符串用于集群内通信认证的密码。
AclFile--acl-file字符串外部 ACL 用户文件。
AadAuthority--aad-authority字符串AAD 认证的颁发机构。
AadAudiences--aad-audiences字符串AAD 认证的 AAD 令牌受众。应为逗号分隔字符串。
AadIssuers--aad-issuers字符串AAD 认证的 AAD 令牌颁发者。应为逗号分隔字符串。
AuthorizedAadApplicationIds--aad-authorized-app-ids字符串AAD 认证的授权客户端应用程序 ID。应为逗号分隔字符串。
EnableAOF--aofbool启用预写日志(只追加文件)。
AofMemorySize--aof-memory字符串内存大小AOF 内存缓冲区使用的总字节数(向下取整到 2 的幂)- 达到此限制后溢出到磁盘
AofPageSize--aof-page-size字符串内存大小每个 AOF 页面的大小,以字节为单位(向下取整到 2 的幂)
CommitFrequencyMs--aof-commit-freqint范围内的整数
[-1, MaxValue]
预写日志(只追加文件)提交发布频率,以毫秒为单位。0 = 每操作立即提交,-1 = 使用 COMMITAOF 命令手动提交
WaitForCommit--aof-commit-waitbool在将结果返回给客户端之前等待 AOF 刷新提交。警告:这将大大增加操作延迟。
AofSizeLimit--aof-size-limit字符串内存大小AOF 的最大大小(向下取整到 2 的幂),超过此大小将应用不安全截断。如果留空,除非进行检查点,否则 AOF 将无限增长
CompactionFrequencySecs--compaction-freqint范围内的整数
[0, MaxValue]
后台混合日志压缩频率,以秒为单位。0 = 禁用( 대신 在检查点之前执行压缩)
ExpiredObjectCollectionFrequencySecs--expired-object-collection-freqint范围内的整数
[0, MaxValue]
后台任务执行对象集合的频率,以秒为单位,该任务从内存中删除对象内过期的成员。0 = 禁用。使用 HCOLLECT 和 ZCOLLECT API 按需收集。
CompactionType--compaction-typeLogCompactionTypeNone, Shift, Scan, Lookup混合日志压缩类型。可选值:None - 不压缩,Shift - 不压缩移动起始地址(数据丢失),Scan - 扫描旧页面并将活动记录移动到尾部(无数据丢失),Lookup - 在压缩范围内查找每个记录,使用哈希链进行记录存活检查(无数据丢失)
CompactionForceDelete--compaction-force-deletebool在应用压缩策略(类型)后立即强制删除非活动段。如果为 false,则执行检查点以实际从磁盘删除旧数据文件。
CompactionMaxSegments--compaction-max-segmentsint范围内的整数
[0, MaxValue]
在触发压缩之前在磁盘上创建的日志段数。
ObjectStoreCompactionMaxSegments--obj-compaction-max-segmentsint范围内的整数
[0, MaxValue]
在触发压缩之前在磁盘上创建的对象存储日志段数。
GossipSamplePercent--gossip-spint每次八卦迭代中与集群节点八卦的百分比。
GossipDelay--gossip-delayint范围内的整数
[0, MaxValue]
集群模式八卦协议每个节点睡眠(以秒为单位)延迟,用于发送更新的配置。
ClusterTimeout--cluster-timeoutint范围内的整数
[0, MaxValue]
集群节点超时是指节点必须不可达的秒数。
ClusterTlsClientTargetHost--cluster-tls-client-target-host字符串在集群模式下使用 TLS 连接时,客户端目标主机的名称。
EnableTLS--tlsbool启用 TLS。
CertFileName--cert-file-name字符串TLS 证书文件名(例如:testcert.pfx)。
CertPassword--cert-password字符串TLS 证书密码(例如:placeholder)。
CertSubjectName--cert-subject-name字符串TLS 证书主题名称。
CertificateRefreshFrequency--cert-refresh-freqint范围内的整数
[0, MaxValue]
TLS 证书刷新频率,以秒为单位(0 表示禁用)。
ClientCertificateRequired--client-certificate-requiredbool是否需要 TLS 客户端证书。
CertificateRevocationCheckMode--certificate-revocation-check-modeX509RevocationModeNoCheck, Online, Offline用于证书验证的证书吊销检查模式(NoCheck、Online、Offline)。
IssuerCertificatePath--issuer-certificate-path字符串包含用于验证的颁发者证书的文件的完整路径。如果为空或 null,则不执行针对颁发者的验证。
LatencyMonitor--latency-monitorbool跟踪各种事件的延迟。
MetricsSamplingFrequency--metrics-sampling-freqint范围内的整数
[0, MaxValue]
度量采样频率,以秒为单位。值为 0 禁用度量监视任务。
QuietMode-q
--
bool启用静默模式不会打印服务器版本和文本艺术。
LogLevel--logger-levelLogLevelTrace, Debug, Information, Warning, Error, Critical, None日志级别。可选值:Trace、Debug、Information、Warning、Error、Critical、None
DisableConsoleLogger--disable-console-loggerbool禁用控制台记录器。
FileLogger--file-logger字符串启用文件记录器并写入指定路径。
ThreadPoolMinThreads--minthreadsint范围内的整数
[0, MaxValue]
线程池中的最小工作线程和完成线程数,0 表示使用系统默认值。
ThreadPoolMaxThreads--maxthreadsint范围内的整数
[0, MaxValue]
线程池中的最大工作线程和完成线程数,0 表示使用系统默认值。
UseAzureStorage--use-azure-storagebool使用 Azure 页 Blob 进行存储,而不是本地存储。
AzureStorageConnectionString--storage-string字符串建立与 Azure Blob 存储的连接时使用的连接字符串。
AzureStorageServiceUri--storage-service-uri字符串建立与 Azure Blob 存储的连接时使用的服务 URI。
AzureStorageManagedIdentity--storage-managed-identity字符串建立与 Azure Blob 存储的连接时使用的托管标识。
CheckpointThrottleFlushDelayMs--checkpoint-throttle-delayint范围内的整数
[-1, MaxValue]
是否以及在多大程度上限制检查点的磁盘 IO:-1 - 禁用限制;>= 0 - 在单独的任务中运行检查点刷新,每次 WriteAsync 后休眠指定时间
EnableFastCommit--fast-commitbool写入 AOF 时使用 FastCommit。
FastCommitThrottleFreq--fast-commit-throttleint范围内的整数
[0, MaxValue]
限制 FastCommit 每 K 次提交写入一次元数据。
NetworkSendThrottleMax--network-send-throttleint范围内的整数
[0, MaxValue]
限制每个会话的最大未完成网络发送。
EnableScatterGatherGet--sg-getbool我们是否对 MGET 或一批连续的 GET 操作使用散布/收集 IO - 有助于饱和磁盘随机读取 IO。
ReplicaSyncDelayMs--replica-sync-delayint范围内的整数
[0, MaxValue]
是否以及在多大程度上(毫秒)限制副本同步:0 - 禁用限制
MainMemoryReplication--main-memory-replicationbool使用主内存复制模型。
OnDemandCheckpoint--on-demand-checkpointbool与主内存复制模型一起使用。在附加时执行按需检查点以避免数据丢失
UseAofNullDevice--aof-null-devicebool使用主内存复制时,将 null 设备用于 AOF。确保没有磁盘 IO,但可能导致复制期间数据丢失。
ConfigImportPath--config-import-path字符串从提供的路径导入(加载)配置选项
ConfigImportFormat--config-import-formatConfigFileTypeGarnetConf, RedisConfconfig-import-path 指定路径中的配置选项格式
ConfigExportFormat--config-export-formatConfigFileTypeGarnetConf, RedisConf将配置选项导出到 config-export-path 指定路径的格式
UseAzureStorageForConfigImport--use-azure-storage-for-config-importbool使用 Azure 存储导入配置文件
ConfigExportPath--config-export-path字符串将当前配置选项导出(保存)到提供的路径
UseAzureStorageForConfigExport--use-azure-storage-for-config-exportbool使用 Azure 存储导出配置文件
UseNativeDeviceLinux--use-native-device-linuxbool在 Linux 上使用原生设备进行本地存储
RevivBinRecordSizes--reviv-bin-record-sizesint[]#,#,...,#: 对于主存储,每个复活桶中的记录大小,按大小递增排序。取代默认的 --reviv;不能与 --reviv-in-chain-only 一起使用
RevivBinRecordCounts--reviv-bin-record-countsint[]#,#,...,#: 对于主存储,每个桶中的记录数:默认(未指定):如果指定了 reviv-bin-record-sizes,则每个桶为 256 条记录 #(一个值):如果指定了 reviv-bin-record-sizes,则所有桶都具有此记录数,否则出错 #,#,...,#(多个值):如果指定了 reviv-bin-record-sizes,则其大小必须与该数组相同,否则出错。取代默认的 --reviv;不能与 --reviv-in-chain-only 一起使用
RevivifiableFraction--reviv-fraction双精度浮点数范围内的双精度浮点数
[0, 1]
#: 可变的内存中日志空间的比例,从最高日志地址到只读区域,符合复活条件。适用于主存储和对象存储。
EnableRevivification--revivbool使用默认的 2 的幂大小的桶指定复活的快捷方式。此默认值可以通过 --reviv-in-chain-only 或 reviv-bin-record-sizes 和 reviv-bin-record-counts 的组合来覆盖。
RevivNumberOfBinsToSearch--reviv-search-next-higher-binsint范围内的整数
[0, MaxValue]
如果在最匹配的桶中无法满足搜索,则搜索此数量的下一个更高桶。需要 --reviv 或 reviv-bin-record-sizes 和 reviv-bin-record-counts 的组合
RevivBinBestFitScanLimit--reviv-bin-best-fit-scan-limitint范围内的整数
[0, MaxValue]
在找到第一个匹配项后,扫描最佳匹配项的记录数。需要 --reviv 或 reviv-bin-record-sizes 和 reviv-bin-record-counts 的组合 0:使用第一个匹配项 #:在第一个匹配项之后限制扫描到此数量的记录,直到桶的记录数
RevivInChainOnly--reviv-in-chain-onlybool仅在标签链中复活已删除的记录(不使用空闲列表)。不能与 reviv-bin-record-sizes 或 reviv-bin-record-counts 一起使用。默认情况下传播到对象存储。
RevivObjBinRecordCount--reviv-obj-bin-record-countint范围内的整数
[0, MaxValue]
对象存储的单个空闲记录桶中的记录数。对象存储只有一个桶,与主存储不同。除非主存储正在使用空闲记录列表,否则忽略。
ObjectScanCountLimit--object-scan-count-limitint范围内的整数
[0, MaxValue]
*SCAN 命令一次迭代返回的项目限制
ExtensionBinPaths--extension-bin-pathsstring[]服务器上管理员用户可以从中加载自定义命令二进制文件的目录列表
ExtensionAllowUnsignedAssemblies--extension-allow-unsignedbool允许从未数字签名的程序集加载自定义命令(不推荐)
IndexResizeFrequencySecs--index-resize-freqint范围内的整数
[1, MaxValue]
索引调整大小检查频率,以秒为单位
IndexResizeThreshold--index-resize-thresholdint范围内的整数
[1, 100]
溢出桶计数超过总索引大小的百分比以触发索引调整大小
EnableLua--luabool在服务器上启用 Lua 脚本
LuaTransactionMode--lua-transaction-modebool将 Lua 脚本作为事务运行(锁定键 - 运行脚本 - 解锁键)