# dwarfeng-tmpstg
**Repository Path**: dwarfeng/dwarfeng-tmpstg
## Basic Information
- **Project Name**: dwarfeng-tmpstg
- **Description**: 基于 subgrade 框架的临时存储处理器
- **Primary Language**: Unknown
- **License**: Apache-2.0
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 1
- **Forks**: 0
- **Created**: 2024-05-15
- **Last Updated**: 2025-06-01
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# dwarfeng-tmpstg
Dwarfeng(赵扶风)的临时存储服务,基于 `subgrade` 项目,使用内存和文件的混合策略,以提高小文件的访问速度,
目前用于多个个人项目。
---
## 特性
1. Subgrade 架构支持。
2. 创建的临时存储,并使用输入流和输出流进行读写,支持多次读写。
3. 写入少量数据时,数据会被写入到内存缓冲,以提高访问速度。
4. 写入大量数据时,超过内存缓冲大小的剩余数据会被写入到文件中,以避免内存过多占用。
5. 支持并发操作,线程安全。
6. 多个临时存储同时写入数据时,保证所有临时存储占用的内存总和不超过指定的大小,以避免多个临时存储同时使用时内存过多占用。
7. 多级别锁机制,一个临时存储使用时不会阻塞其他临时存储的读写操作。
8. 临时存储释放后支持手动清理以及自动清理(可通过选项选择是否启用),适用于不同的场景。
运行 `src/test` 下的示例以观察全部特性。
| 示例类名 | 说明 |
|--------------------------------------------------------|---------|
| com.dwarfeng.tmpstg.example.ConcurrentOperationExample | 多线程操作示例 |
| com.dwarfeng.tmpstg.example.MultipleReadsExample | 多次读取示例 |
| com.dwarfeng.tmpstg.example.MultipleWritesExample | 多次写入示例 |
| com.dwarfeng.tmpstg.example.ProcessExample | 流程示例 |
## 文档
该项目的文档位于 [docs](./docs) 目录下,包括:
### wiki
wiki 为项目的开发人员为本项目编写的详细文档,包含不同语言的版本,主要入口为:
1. [简介](./docs/wiki/zh_CN/Introduction.md) - 镜像的 `README.md`,与本文件内容基本相同。
2. [目录](./docs/wiki/zh_CN/Contents.md) - 文档目录。
## 安装说明
1. 下载源码。
使用 git 进行源码下载。
```shell
git clone git@github.com:DwArFeng/dwarfeng-tmpstg.git
```
对于中国用户,可以使用 gitee 进行高速下载。
```shell
git clone git@gitee.com:dwarfeng/dwarfeng-tmpstg.git
```
2. 项目安装。
进入项目根目录,执行 maven 命令
```shell
mvn clean source:jar install
```
3. 项目引入。
在项目的 pom.xml 中添加如下依赖:
```xml
com.dwarfeng
dwarfeng-tmpstg
${dwarfeng-tmpstg.version}
```
4. enjoy it.
## 如何使用
1. 运行 `src/test` 下的示例代码以观察全部特性。
2. 观察项目结构,将其中的配置运用到其它的 subgrade 项目中。
### 单例模式
加载 `com.dwarfeng.tmpstg.configuration.SingletonConfiguration`,即可获得单例模式的 `TmpstgHandler`。
在项目的 `application-context-scan.xml` 中追加 `com.dwarfeng.tmpstg.configuration` 包中
`SingletonConfiguration` 的扫描,示例如下:
```xml
```
### 多实例模式
不使用包扫描,使用 xml 或者配置类生成 `TemporaryStorageHandlerImpl` 实例。
在项目的 `bean-definition.xml` 中追加配置,示例如下:
```xml
```
### 任意数量的实例模式
自行设计 `TemporaryStorageHandler` 的工厂类,调用相关工厂方法生成 `TemporaryStorageHandlerImpl` 实例。
需要注意的是:生成的 `TemporaryStorageHandlerImpl` 在使用之前需要调用 `TemporaryStorageHandlerImpl#start()` 启动处理器;
同时在使用完毕之后, 需要调用 `TemporaryStorageHandlerImpl#stop()` 关闭处理器。