# 本地缓存工具 Storage

## Feature

- 支持命名模块隔离
- 支持过期控制
- 支持内存缓存
- 支持同步/异步 API
- 支持版本隔离

## Usage

```js
export const storage = createStorage({
  namespace,
  expires,
  memoryChace,
  version,
});

// 内置方法
// 异步
await storage.get(key);
await storage.set(key, value, options);
await storage.remove(key);
await storage.clear();
// 同步
storage.getSync(key);
storage.setSync(key, value, options);
storage.removeSync(key);
storage.clearSync();
```

## API

### createStorage

Storage 配置

#### Params

| 参数        | 说明                                             | 类型              | 必填 | 默认值  |
| ----------- | ------------------------------------------------ | ----------------- | ---- | ------- |
| namespace   | 设置命名,相当于把缓存 `key` 加上前缀             | `string`          | 否   | -       |
| expires     | 设置过期时间，默认过期时间是`-1`, 代表永久不过期 | `string / number` | 否   | `-1`    |
| memoryChace | 设置缓存模式，把数据缓存到内存里                 | `boolean`         | 否   | `false` |
| version     | 设置版本隔离                                     | `string`          | 否   | `1.0.0` |

**过期时间**
`expires` 过期时间，同时支持传入数字时间`(10 * 1000)` + 时间格式 `(10d)`

```ts
await storage.set('TOKEN', 'abc123456', '10s'); // 10 seconds 过期
await storage.set('TOKEN', 'abc123456', '10m'); // 10 minutes 过期
await storage.set('TOKEN', 'abc123456', '10h'); // 10 hours 过期
await storage.set('TOKEN', 'abc123456', '10d'); // 10 days 过期
await storage.set('TOKEN', 'abc123456', 60 * 1000); // 60 seconds 过期
```

**命名隔离**
设置 `namespace` 属性，使其成为带命名空间的模块，起到命名隔离

```ts
export const storage = createStorage({
  namespace: 'MP', // 全局设置
});

await storage.set('TOKEN', 'abc123456'); // key === 'MP_TOKEN'
```

**内存缓存**
设置 `memoryChace` 属性，进一步优化读取速度与安全，支持开启建立内存缓存，实现机制如下：

- 读：优先访问内存，其次到 wx.storage，默认增量式写入。
- 写：同时写入内存与 wx.storage

```ts
export const storage = createStorage({
  memoryChace: true, // 全局开启
});

await storage.set('TOKEN', 'abc123456', { memoryChace: false }); // 关闭内存写入，下去获取则从缓存中拿值
```

### storage.get

异步读取缓存

```ts
async function get(key: string);
```

### storage.set

异步写入缓存

```ts
async function set(key: string, value: any, options: number | string | SetStorageOption);
```

#### Params

| 参数        | 说明                                             | 类型              | 必填 | 默认值  |
| ----------- | ------------------------------------------------ | ----------------- | ---- | ------- |
| expires     | 设置过期时间，默认过期时间是`-1`, 代表永久不过期 | `string / number` | 否   | `-1`    |
| memoryChace | 设置缓存模式，把数据缓存到内存里                 | `boolean`         | 否   | `false` |

### storage.remove

异步删除缓存

```ts
async function remove(key: string);
```

### storage.clear

异步清空全部缓存

```ts
async function clear();
```

### storage.getSync

同步读取缓存, 参数设置如 `storage.get` 相同

### storage.setSync

同步写入缓存, 参数设置如 `storage.set` 相同

### storage.removeSync

同步删除缓存, 参数设置如 `storage.remove` 相同

### storage.clearSync

同步清空全部缓存
