# 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);
~~~