Data

<br/> >i 本文档的最新修订日期是: > **2021-01-25** # Data ## 模块简述 将数据缓存至指定的位置,并在需要时读取/清除它。 ## 模块配置 配置文件位于 <font color="#c7254e">`/Config/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; } ]); ```