feat(storage): 添加细粒度锁机制保证线程安全

- 通过细粒度锁机制保证线程安全,每个键都有独立的锁
- 更新文档说明线程安全特性,不同键的操作可以并发执行
- 添加存储键格式说明,支持使用 / 作为分隔符创建目录层级
- 补充异步操作安全性说明,异步IO仍使用锁保证并发访问安全
This commit is contained in:
GwWuYou 2026-01-11 20:46:45 +08:00
parent 4c997ffc07
commit 3afef8cb49

View File

@ -13,6 +13,7 @@
- 支持同步和异步操作
- 自动创建存储目录
- 防止路径遍历攻击(过滤非法文件名字符)
- 通过细粒度锁机制保证线程安全(每个键都有独立的锁)
### 构造函数
@ -125,6 +126,9 @@ settingsStorage.Write("level", "high");
实现能够正确处理你要存储的数据类型。
2. **错误处理**[FileStorage](./FileStorage.cs) 的 `Read<T>(string key)` 方法会在键不存在时抛出异常,可以使用
`Read<T>(string key, T defaultValue)` 来避免异常。
3. **线程安全**当前实现不是线程安全的,如需在多线程环境中使用,请添加适当的同步机制
3. **线程安全**[FileStorage](./FileStorage.cs) 通过细粒度锁机制保证线程安全,每个键都有独立的锁,因此不同键的操作可以并发执行
4. **文件权限**:确保应用程序对指定的存储目录有读写权限。
5. **路径安全**[FileStorage](./FileStorage.cs) 会自动防止路径遍历攻击,因此键不能包含 `..`,并且特殊字符会被替换为下划线。
5. **路径安全**[FileStorage](./FileStorage.cs) 会自动防止路径遍历攻击,因此键不能包含 `..`,并且特殊字符会被替换为下划线。
6. **存储键格式**:键可以包含 `/` 作为分隔符,这将被转换为相应的目录层级,例如 `"player/profile"` 会存储在
`player/profile.dat` 文件中。
7. **异步操作**尽管异步读写操作使用了异步IO但仍会使用锁来保证对同一键的并发访问安全。