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; } ]); ```