|
||
---|---|---|
Readme.md | ||
go.mod | ||
kvstore.go | ||
kvstore_test.go | ||
skiptable.go |
Readme.md
README 文档
项目名称:gocache
简介
gocache
是一个简单的内存键值存储系统,支持持久化、事务处理和内存限制功能。它提供了基本的 Put
、Get
和 Delete
操作,并且可以通过日志文件进行恢复。此外,还支持事务处理,确保数据的一致性和可靠性。
目录结构
gocache/
├── kvstore.go # 主要实现代码
└── kvstore_test.go # 测试代码
安装与使用
- 安装依赖
本项目仅依赖 Go 标准库,无需额外安装第三方库。
go get git.pyer.club/kingecg/gocache
功能说明
- KVStore 结构体
NewKVStore(file string, memoryLimit int64, bucketCount int) *KVStore
: 创建一个新的 KVStore 实例。Put(key, value string)
: 添加或更新键值对。Get(key string) (string, bool)
: 获取指定键的值。Delete(key string)
: 删除指定键的键值对。SaveToFile() error
: 将当前存储的数据保存到文件中。LoadFromFile(keys ...string) error
: 从文件加载数据,支持部分加载。BeginTransaction()
: 开始一个新的事务。Commit() error
: 提交当前事务。Rollback()
: 回滚当前事务。PutInTransaction(key, value string)
: 在当前事务中添加或更新键值对。LogOperation(op string, key, value string) error
: 记录操作日志。RecoverFromLog() error
: 从日志文件恢复数据。periodicSave()
: 定时保存脏数据并清空日志文件。
测试用例说明
- TestNewKVStore: 测试创建新的 KVStore 实例是否成功。
- TestPutAndGet: 测试
Put
和Get
操作是否正确。 - TestDelete: 测试
Delete
操作是否能正确删除键值对。 - TestSaveAndLoadFromFile: 测试将数据保存到文件并从文件加载的功能。
- TestLogOperation: 测试日志记录功能。
- TestTransaction: 测试事务处理功能,包括提交和回滚。
注意事项
- 内存限制:
memoryLimit
参数用于限制内存使用量,当超过限制时会触发 panic。可以根据实际需求调整该参数。 - 持久化:数据会定期保存到文件中,并且可以通过日志文件进行恢复。请确保有足够的磁盘空间来存储这些文件。
- 事务处理:事务可以保证一组操作的原子性,但在高并发场景下需要注意锁机制的影响。
贡献指南
欢迎任何开发者为本项目贡献代码或提出改进建议。请遵循以下步骤:
- Fork 本仓库。
- 创建新分支 (
git checkout -b feature/your-feature
)。 - 提交更改 (
git commit -am 'Add some feature'
)。 - 推送到远程分支 (
git push origin feature/your-feature
)。 - 提交 Pull Request。
许可证
本项目采用 MIT 许可证,详情请参见 LICENSE 文件。
希望这份 README 文档能够帮助您更好地理解和使用 gocache
。如果有任何问题或建议,请随时联系开发者。