用途:在 Roblox 中跨会话持久化玩家数据,例如金币、背包、等级;构建持久排行榜;修复数据丢失、覆盖与限流问题。仅用于服务端脚本调用 DataStoreService、GetDataStore、GetAsync、SetAsync、UpdateAsync 或 GetOrderedDataStore 的场景。通用脚本、服务、Remote 与客户端/服务端分工请参考 roblox-luau;高频临时状态(匹配、单局)用内存存储;引擎无关的持久化理论参考 save-systems。
主要能力与用法:先在 Studio 的 File → Game Settings → Security 中一次性启用 API 服务访问(DataStore 只在服务端 Script 中可用,LocalScript 不可用);用 DataStoreService:GetDataStore("Name") 取存储,键通常为 "Player_" .. player.UserId;所有网络调用包在 pcall 中;在 PlayerAdded 加载、PlayerRemoving 保存,并用 game:BindToClose 在关服时保存剩余玩家;读改写优先用 UpdateAsync(多服务器安全),避免 SetAsync 盲覆盖;加载失败时标记会话并拒绝保存,防止用默认值覆盖真实数据;排行榜用 GetOrderedDataStore 配合 GetSortedAsync;可为瞬时失败加 2^n 秒退避重试;IncrementAsync 用于整数自增。
限制与注意:UpdateAsync 回调内不可 yield;只支持可 JSON 序列化的值(数字、字符串、布尔、字符串/数字键的表),实例、Vector3、CFrame、函数不可直接存;需遵守按键与按分钟请求限制,避免每次变更都保存,应批量或定时/离开时保存;GetAsync 有短暂缓存,立即重读可能过期;OrderedDataStore 不支持版本与元数据,其 DataStoreKeyInfo 为 nil;未启用 API 访问时 Studio 中会静默不可用。测试方式是加入、改数据、重新加入确认持久化。会话锁定、版本/元数据、分页与合规等细节见参考资料。以上内容均据所给资料整理,价格、平台可用性等未提供。