Thinkphpのキャッシュ(Cache)およびS関数
6084 ワード
PhpのキャッシュメカニズムがS関数であることを確認したが、実際にはS関数のキャッシュはCache(thinkphp 3.2バージョンのクラスはコアディレクトリThinkPHP/Library/Think/Cache.class.phpであり、対応する機能ライブラリはThinkPHP/Library/Think/Cache/DRiverにある)というクラスライブラリの中のものを直接呼び出している.
S関数からThinkPHPフレームワークのキャッシュメカニズムを分析し、キャッシュ、クエリーキャッシュ、SQL解析キャッシュ、静的キャッシュなどは根本的にこのメカニズムの下で実行されていますが、切り込み方法が違います.まず、S関数の定義を見てみましょう.
S関数からThinkPHPフレームワークのキャッシュメカニズムを分析し、キャッシュ、クエリーキャッシュ、SQL解析キャッシュ、静的キャッシュなどは根本的にこのメカニズムの下で実行されていますが、切り込み方法が違います.まず、S関数の定義を見てみましょう.
get($name);
} elseif (is_null($value)) { //
return $cache->rm($name);
} else { //
if (is_array($options)) {
$expire = isset($options['expire']) ? $options['expire'] : NULL;
} else {
$expire = is_numeric($options) ? $options : NULL;
}
return $cache->set($name, $value, $expire);
}
}
?>
、 、 , , cache :Think\Cache::getInstance , :File、Db、Apc、Memcache、Shmop、Sqlite、Xcache、Apachenote、Eaccelerator , , :
/**
*
* @static
* @access public
* @return mixed
*/
static function getInstance($type = '', $options = array()) {
static $_instance = array();
$guid = $type . to_guid_string($options);
if (!isset($_instance[$guid])) {
$obj = new Cache();
$_instance[$guid] = $obj->connect($type, $options);
}
//print_r($_instance);
return $_instance[$guid];
}
このメソッドは、このクラスのconnectメソッドを び し、コードを てください./**
*
* @access public
* @param string $type
* @param array $options
* @return object
*/
public function connect($type = '', $options = array()) {
if (empty($type))
$type = C('DATA_CACHE_TYPE');
$class = strpos($type, '\\') ? $type : 'Think\\Cache\\Driver\\' . ucwords(strtolower($type));
if (class_exists($class))
$cache = new $class($options);
else
E(L('_CACHE_TYPE_INVALID_') . ':' . $type);
return $cache;
}
にキャッシュタイプを するコードはここにあり、「Think\Cache\Driver」はフレームワークでサポートされるキャッシュタイプを し、 サポートされるキャッシュタイプのファイルはここでクラスファイルです.キャッシュ・タイプが されていない 、フレームワークはプロファイルの「C('DATA_CACHE_TYPE')」のデフォルト を します.フレームワークのデフォルト のキャッシュ・タイプを てみましょう.CACHE_TYPE'=>'File'は、フレームワークのデフォルトではFileタイプのキャッシュメカニズムが されていることが らかです.もちろん、このようなコードフレームワークを らかにすると、その は たち もより なプロジェクトのキャッシュタイプを することに があるのではないでしょうか.
ThinkPHPが するSなどのカプセル された を うのが きではなく、CacheDriverの のクラスを うのが きなプログラミングオオカミがたくさんいます.
はcacheの な い についてです
:まずこのコードはコントローラに かれています!
$cache=Cache::getInstance('File');キャッシュを くフラグです
$cache->set('username',' ',10);// usernameを と び、10 にキャッシュする
$cache->get('username');//キャッシュされたusername の
serialize(「 」)は、1つの を にシーケンス します(なぜシーケンス するのですか? が よりメモリが さいためです).
unserialize('シーケンス された '); シーケンス を シーケンス にするclass CacheAction extends Action {
function cache() {
$cache = Cache::getInstance('File');
$cache->set('username', ' ', 10); // username , Runtime temp , 10
//echo $cache->get('username');
$cache->set('people', array('name' => 'xiaobai', 'age' => '23', 'gender' => 'wan'), 12);
$this->display();
}
function test() {
$cache = Cache::getInstance('File');
echo " , runtime/temp " . "
";
echo $cache->get('username'); // username
dump($cache->get('people'));
}
function rm() {
$cache = Cache::getInstance('File');
$cache->rm('people'); //rm
}
function update() {
$cache = Cache::getInstance('File');
$cache->set('username', 'sunyalong', 10); // username
}
function add() {
$arr = array('name' => 'syl', 'age' => '23');
$str = serialize($arr); // serialize php
echo $str;
echo "
, !";
$date = array('username' => $str, 'password' => '123456');
$model = M('usertable');
if ($model->add($date)) {
echo " !";
} else {
echo " !";
}
}
function select() {
$model = M('usertable');
$rows = $model->field('username')->select();
$row = unserialize($rows[1]['username']);
echo " ,
";
dump($row);
echo $row['name'] . '------' . $row['age'];
//dump($rows);
}
}