Data
<br/>
>i 本文档的最新修订日期是:
> **2022-07-20**
# Data
## 模块简述
将数据缓存至指定的位置,并在需要时读取/清除它。
## 模块配置
配置文件位于 <font color="#c7254e">`/config/core/Data.php`</font> 。
* **<font color="#ff6600">`handle`</font>** <font color="#0099ff">`(String)`</font> <font color="#bbbbbb">`'File'`</font> :
指定缓存数据的方式。
<font color="#c7254e">`File`</font> 代表通过在硬盘中建立缓存文件的方式进行缓存。
<font color="#c7254e">`Redis`</font> 代表通过使用Redis进行缓存。
* **<font color="#ff6600">`connect`</font>** <font color="#0099ff">`(Array)`</font> <font color="#bbbbbb">`无`</font> :
缓存各存储介质的配置项集合。
* **<font color="#ff6600">`file`</font>** <font color="#0099ff">`(Array)`</font> <font color="#bbbbbb">`无`</font> :
使用硬盘缓存时的配置项集合。
* **<font color="#ff6600">`level`</font>** <font color="#0099ff">`(Int)`</font> <font color="#bbbbbb">`3`</font> :
指定文件夹的层级,取值范围为 <font color="#c7254e">`1`</font> 至 <font color="#c7254e">`15`</font> 。
>w 当缓存数量较多(例如有数千个商品的数据需要缓存)时,应适当增大此配置项的值。
过多或过少的层级,都将影响缓存的性能,请根据实际情况调优,或选择性能更佳的内存式缓存。
* **<font color="#ff6600">`clean`</font>** <font color="#0099ff">`(Int)`</font> <font color="#bbbbbb">`1000`</font> :
指定当被读取的缓存过期时,清理此缓存(删除该缓存对应的缓存文件)的概率。
即过期的缓存被读取 <font color="#c7254e">`多少次`</font> 时,当中有 <font color="#c7254e">`1`</font> 次可能会触发缓存的清理。
>w 由于清理缓存是概率性触发,因此在指定的读取次数中,可能不会触发缓存清理,也可能会多次触发缓存清理。
过大的概率将影响磁盘的性能,请根据实际情况调优,或选择性能更佳的内存式缓存。
* **<font color="#ff6600">`redis`</font>** <font color="#0099ff">`(Array)`</font> <font color="#bbbbbb">`无`</font> :
使用redis数据库缓存时的配置项集合。
* **<font color="#ff6600">`address`</font>** <font color="#0099ff">`(String)`</font> <font color="#bbbbbb">`'localhost'`</font> :
redis数据库的连接地址。
* **<font color="#ff6600">`password`</font>** <font color="#0099ff">`(String)`</font> <font color="#bbbbbb">`''`</font> :
redis数据库的认证密码。
* **<font color="#ff6600">`dbnumber`</font>** <font color="#0099ff">`(Int)`</font> <font color="#bbbbbb">`0`</font> :
需要使用的redis数据库的编号。
* **<font color="#ff6600">`port`</font>** <font color="#0099ff">`(Int)`</font> <font color="#bbbbbb">`6379`</font> :
redis数据库的连接端口。
* **<font color="#ff6600">`timeout`</font>** <font color="#0099ff">`(Int)`</font> <font color="#bbbbbb">`15`</font> :
redis数据库的连接超时时间。
## 公共参数
* **<font color="#ff6600">`key(键)`</font>** <font color="#0099ff">`(String)`</font> <font color="#BBBBBB">`默认值见方法参数`</font>:
用以指定缓存数据的名称。
* **<font color="#ff6600">`prefix(前缀)`</font>** <font color="#0099ff">`(String)`</font> <font color="#BBBBBB">`默认值见方法参数`</font>:
用以指定缓存数据的前缀,以便区分不同类型的缓存数据。
在使用 <font color="#c7254e">`File(文件模式)`</font> 的缓存时,可使用 <font color="#c7254e">`URI`</font> 的形式设置前缀,例如 <font color="#c7254e">`User/Info/Password`</font> ,则框架会在 <font color="#c7254e">`/Temp/Data`</font> (即缓存目录)下自动自动建立前述的三级文件夹,并将缓存文件放置其内。
## :: set()方法
### 语法
**<font color="#0099ff"><font color="#ff6600">Data</font> :: <font color="#ff6600">set</font> ( <kbd>传参数组</kbd> ) </font>**
### 说明
缓存数据。
此方法 <font color="#c7254e">`支持`</font> 中文参数名。
### 参数
* **<font color="#ff6600">`prefix(前缀)`</font>** <font color="#0099ff">`(String)`</font> <font color="#BBBBBB">`''`</font>:
详见本模块 <font color="#c7254e">`公共参数`</font> 部分的说明。
* **<font color="#ff6600">`key(键)`</font>** <font color="#0099ff">`(String)`</font> <font color="#BBBBBB">`<必须>`</font>:
详见本模块 <font color="#c7254e">`公共参数`</font> 部分的说明。
* **<font color="#ff6600">`value(值)`</font>** <font color="#0099ff">`(Mix)`</font> <font color="#BBBBBB">`<必须>`</font>:
指定缓存数据的值,值的类型可为 <font color="#c7254e">`Bool | Array | Int | Float | String | Object`</font> 中的其中一种。
当传入的值为 <font color="#c7254e">`NULL`</font> 时,将会自动替换为 <font color="#c7254e">`空字符串`</font> ,读取该缓存时也将得到一个空字符串。
* **<font color="#ff6600">`time(时间)`</font>** <font color="#0099ff">`(Int)`</font> <font color="#BBBBBB">`3600`</font>:
指定缓存的有效时间,单位为秒(s)。
当传入的值 <font color="#c7254e">`小于1`</font> 时,将会主动 <font color="#c7254e">`删除`</font> 该缓存,无论该缓存是否过期。
>w 在使用Redis作为缓存数据的方式时,缓存的实际过期时间可能因数据库服务器与Web服务器时间不一致而发生变更。
### 返回
<font color="#0099ff">`(Bool)`</font> 类型。
返回值为 <font color="#c7254e">`TRUE`</font> 时代表操作成功完成、<font color="#c7254e">`FALSE`</font> 代表操作失败。
## :: get()方法
### 语法
**<font color="#0099ff"><font color="#ff6600">Data</font> :: <font color="#ff6600">get</font> ( <kbd>传参数组</kbd> ) </font>**
### 说明
获取缓存数据。
此方法 <font color="#c7254e">`支持`</font> 中文参数名。
### 参数
* **<font color="#ff6600">`prefix(前缀)`</font>** <font color="#0099ff">`(String)`</font> <font color="#BBBBBB">`''`</font>:
详见本模块 <font color="#c7254e">`公共参数`</font> 部分的说明。
* **<font color="#ff6600">`key(键)`</font>** <font color="#0099ff">`(String)`</font> <font color="#BBBBBB">`<必须>`</font>:
详见本模块 <font color="#c7254e">`公共参数`</font> 部分的说明。
* **<font color="#ff6600">`callback(回调)`</font>** <font color="#0099ff">`(Function Obiect)`</font> <font color="#BBBBBB">`NULL`</font>:
用以指定当缓存不存在时,框架执行的回调函数。
请参见下方的示例。
### 返回
数据类型由缓存的数据类型决定。
当返回值为 <font color="#c7254e">`NULL`</font> 时代表缓存已过期/不存在,或者操作失败。
### 示例
读取并输出一个键为random的缓存,如果未能取到该缓存(缓存不存在或已过期),则通过回调的方式,获取一个随机数,写入新的缓存值。
```php
function getNumbert(){
return mt_rand(11111,99999);
}
echo Data::get([
'key'=>'random',
'callback'=>function(){
$Random = getNumbert();
Data::Set([
'key'=>'random',
'value'=>$Random,
'time'=>5
]);
return $Random;
}
]);
```