Data
<br/>
>i 本文档的最新修订日期是:
> **2024-02-29**
# Data ::
将数据缓存至指定的位置,并在需要时读取/清除它。
# 依赖
本模块依赖于框架模块 <font color="#c7254e">`Redis_`</font> 。
# 模块配置
配置文件位于 <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">`(String)`</font> <font color="#bbbbbb">`'default'`</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> (即缓存目录)下自动自动建立前述的三级文件夹,并将缓存文件放置其内。
* **<font color="#ff6600">`hash(hash)`</font>** <font color="#0099ff">`(Bool)`</font> <font color="#BBBBBB">`默认值见方法参数`</font>:
用以指定使用Redis缓存数据时是否以hash模式存储数据。
当本参数的值为 <font color="#c7254e">`true`</font> 时,将会以hash模式存储数据。参数 <font color="#c7254e">`prefix(前缀)`</font> 的值将作为redis内存储的 <font color="#c7254e">`键名`</font>,参数 <font color="#c7254e">`key(键)`</font> 的值将作为hash内的 <font color="#c7254e">`字段名`</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">`hash(hash)`</font>** <font color="#0099ff">`(Bool)`</font> <font color="#BBBBBB">`false`</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> 时,将会主动删除该缓存,无论该缓存是否过期。
当使用Redis模式存储数据并且参数 <font color="#c7254e">`hash`</font> 的值为 <font color="#c7254e">`true`</font> 时,缓存数据不会自动过期,如果需要对整个hash设置有效期,需要自行实现。
>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="#c7254e">`支持`</font> 参数简写。
## 参数
* **<font color="#ff6600">`key(键)`</font>** <font color="#0099ff">`(String)`</font> <font color="#BBBBBB">`<必须>`</font> <font color="#19c58c">`可简写`</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">`hash(hash)`</font>** <font color="#0099ff">`(Bool)`</font> <font color="#BBBBBB">`false`</font>:
详见本模块 <font color="#c7254e">`公共参数`</font> 部分的说明。
* **<font color="#ff6600">`callback(回调)`</font>** <font color="#0099ff">`(Function Obiect)`</font> <font color="#BBBBBB">`NULL`</font>:
用以指定当缓存不存在时,框架执行的回调函数,该函数必须接受且只能接受一个参数。
请参见下方的示例。
* **<font color="#ff6600">`argument(参数)`</font>** <font color="#0099ff">`(~)`</font> <font color="#BBBBBB">`NULL`</font>:
用以指定回调函数的传入参数。
请参见下方的示例。
## 返回
数据类型由缓存的数据类型决定。
当返回值为 <font color="#c7254e">`NULL`</font> 时代表缓存已过期/不存在,或者操作失败。
## 示例
读取并输出一个键为random的缓存,如果未能取到该缓存(缓存不存在或已过期),则通过回调的方式,获取一个随机数,写入新的缓存值。
```php
function getPhone($UID){
//假设使用uid查询到了用户的电话信息
return '+86.10086';
}
echo Data::get([
'key'=>'random',
'callback'=>function($UID){
$Random = getNumber($UID);
Data::Set([
'key'=>'random',
'value'=>$Random,
'time'=>5
]);
return $Random;
}
]);
```