Skip to content

MemoryStoreSortedMapSetOptions

概览

字段
KindData · 数据 Data
Realmserver

MemoryStoreSortedMapSetOptions 用于配置 MemoryStoreSortedMap:SetAsync 的写入行为,支持条件更新、自增操作和键的生存时间设置。通过组合 XX、NX、LT、GT 等条件字段,可实现仅在满足特定条件时才执行写入;INCR 字段允许对数值型排序键进行原子累加;EX、PX 等字段则控制键的过期策略。

适用场景

在排行榜或计数器场景中,需要原子地累加排序键并同时刷新键的生存时间时,使用 MemoryStoreSortedMapSetOptions 配置 INCR 和 EX 字段,确保写入的并发安全与数据时效性。

使用要点

通过 MemoryStoreSortedMapSetOptions.New() 创建配置对象,设置所需的条件字段(如 INCR = true)和 TTL 字段(如 EX = 86400),然后将该对象作为参数传入 sortedMap:SetAsync(key, value, sortKey, opts)。

注意事项

所有字段均为可选;INCR 仅对数值 sortKey 生效。EX、PX、EXAT、PXAT 与 KEEPTTL 是互斥的 TTL 策略,一次写入只选择其中一种。

代码示例

设置 TTL 并写入排行榜分数

lua
-- @runtime server
local Task = game:GetService("Task")
Task:Spawn(function()
    local MemoryStoreService = game:GetService('MemoryStoreService')
    local sortedMap = MemoryStoreService:GetSortedMap('season_score')

    local options = MemoryStoreSortedMapSetOptions.New()
    options.EX = 86400
    sortedMap:SetAsync('player:1001', 1200, 1200, options)
end)

属性 (20)

Name类型默认值说明
XXBool-仅当键存在时设置。
NXBool-仅当键不存在时设置。
MSXXBool-仅当整个 MemoryStore 存在时设置。
MSNXBool-仅当整个 MemoryStore 不存在时设置。
LTBool-仅当新旧 sortKey 都为数值且新值小于当前值时更新。
LTEBool-仅当新旧 sortKey 都为数值且新值小于等于当前值时更新。
GTBool-仅当新旧 sortKey 都为数值且新值大于当前值时更新。
GTEBool-仅当新旧 sortKey 都为数值且新值大于等于当前值时更新。
INCRBool-累加而非覆盖 sortKey,要求新旧值均为数值。
LTTFloat-仅当旧 sortKey 小于指定值时更新。
LTETFloat-仅当旧 sortKey 小于等于指定值时更新。
GTTFloat-仅当旧 sortKey 大于指定值时更新。
GTETFloat-仅当旧 sortKey 大于等于指定值时更新。
EQTFloat-仅当旧 sortKey 等于指定值时更新。
NEQTFloat-仅当旧 sortKey 不等于指定值时更新。
EXInt-以秒为单位的生存时间。
PXInt-以毫秒为单位的生存时间。
EXATInt-以秒为单位的绝对生存时间。
PXATInt-以毫秒为单位的绝对生存时间。
KEEPTTLBool-保留现有键的生存时间。

函数 (1)

New

签名:New() -> MemoryStoreSortedMapSetOptions

创建一个新的 MemoryStoreSortedMapSetOptions 实例,用于配置 SortedMap 的 SetAsync 操作选项。

返回值 MemoryStoreSortedMapSetOptions

示例代码

构造 MemoryStoreSortedMapSetOptions 并设置条件写入选项

lua
-- @runtime server
local Task = game:GetService("Task")
Task:Spawn(function()
    local memoryStoreService = game:GetService("MemoryStoreService")
    local sortedMap = memoryStoreService:GetSortedMap("TestMap")

    -- 使用 New() 构造选项对象,并设置 NX 条件(仅当 key 不存在时写入)
    local opts = MemoryStoreSortedMapSetOptions.New()
    opts.NX = true

    -- 调用 SetAsync 写入数据,传入选项
    sortedMap:SetAsync("player_001", "score_value", 100, opts)
    print("已尝试条件写入:仅当 key 不存在时设置。")
end)