# Cache
Cache用于缓存管理,提供三种缓存方式:
* Redis redis缓存,需要安装hiredis扩展
* File 文件缓存
* Table 内存表缓存
#### Redis
同步:
~~~PHP
/**
* 同步reids
* @param array $options 连接配置
* @param is_sync true
* /
$redis = Redis::getInstance(array $options = [], true);
/**
* 获取同步客户端的缓存前缀
* @return string
*/
$redis->getRedisPrefix();
/**
* redis操作魔术方法,自动映射
*/
$redis->__call($name, $arguments);
~~~
异步:
基于swoole_redis,依赖于hiredis扩展
~~~PHP
/**
* 异步reids
* @param array $options 连接配置
* @param bool $is_sync false
* @param callable $callback 回调函数
* /
Redis::getInstance(array $options = [], false,callable $callback);
/**
* 异步redis的操作必须在回调函数中写,支持类方法,函数,匿名函数等回调函数写法
* 回调函数提供两个参数
* @param $redis redis操作句柄
* @param $get_redis_key 获取redis实际缓存key函数,会返回一个拼接配置中缓存前缀的实际缓存key值
*/
Redis::getInstance(['host'=>'127.0.0.1','port'=>6379,'password'=>''], false,function ($redis,$get_redis_key) {
$redis->get($get_redis_key('vswoole'));
});
~~~
#### File
缓存文件位于根目录下的data/cache/目录下。
~~~PHP
/**
* 设置缓存
* @param string $key 缓存key
* @param null $value 缓存value
* @param string $prefix 缓存前缀
* @param int $expire 缓存有效期
* @return bool|int 返回设置状态
*/
File::set(string $key, $value = null, string $prefix = '', int $expire = 0);
//缓存设置
//支持所有PHP基本数据类型,除匿名函数以及带匿名函数的类
//设置字符串
File::set('a',1);
//设置数组
File::set('b',[1,2,3]);
//删除设置
File::set('a',null);
//带缓存前缀
File::set('c',1,'vswoole_');
//带有效期,单位为s,0为永久生效,负值为立即失效
File::set('d',1'vswoole',60);
//缓存读取
File::get(string $key, $prefix = '')
//如果缓存未过期,返回对应的数据
//如果缓存key过期或缓存key不存在,返回null
File::get('a');
File::get('c','vswoole_');
~~~
#### Table
Table缓存基于swoole_table,是将数据存储在内存中,服务进程关闭,数据将会销毁,适用于非重要或无需物理物理存储的数据存储。
优点:Table缓存直接操作内存,因此IO效率很高。
缺点:需要在服务启动前创建缓存表,不能随时创建。
~~~PHP
/**
* 实例化缓存Table对象
* @param int $table_size 数据可存储条数
*/
$table = new Table(int $table_size = 1024);
/**
* 创建缓存表
* @param array $column 缓存表结构字段
* @param string $field 表字段名称
* @param string $field_type 表字段类型[string/\swoole_table::TYPE_STRING,int/\swoole_table::TYPE_INT,float/\swoole_table::TYPE_FLOAT]
* @param int $field_length 表字段最大长度
*/
$table->create([$field=>[$field_type,'$filed_legth]]);
//举例
$table->create(['name'=>['string',16],'age'=>['int',2]]);
/**
* 显示已设置的内存表结构
* @return string
*/
$table->show();
/**
* 获取内存表物理大小
* @return int
*/
$table->getTableSize();
/**
* 获取内存表内存大小
* @return mixed
*/
$table->getTableMemorySize();
/**
* 获取内存表所有数据
* @return array
*/
$table->getAll();
/**
* 删除内存表所有数据
* @return int
*/
$table->deleteAll();
/**
* 获取内存表对象实例
* @return null|\swoole_table
*/
$table->getTable();
/**
* 魔术方法,执行原生方法
* @param $name
* @param $arguments
* @return mixed
*/
$table->__call($name, $arguments);
~~~