日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

thinkphp mysql缓存_ThinkPhp数据缓存技术

發(fā)布時(shí)間:2025/6/15 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 thinkphp mysql缓存_ThinkPhp数据缓存技术 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

1.緩存初始化

在 ThinkPHP 中,有一個(gè)專門處理緩存的類:Cache.class.php(在Thinkphp/Library/Think/cache.class.php,其他的各種緩存類也在這個(gè)文件夾下)。

而我們使用的時(shí)候,并不需要直接聲明它,直接使用一個(gè)大 S()方法即可

ThinkPhp系統(tǒng)內(nèi)置對緩存操作進(jìn)行了封裝,直接采用S方法。

//緩存初始化

S(array('type'=>'xcache','expire'=>60));

緩存初始化,要指明緩存類型和緩存時(shí)間。

1.1緩存類型

ThinkPhp系統(tǒng)目前已經(jīng)支持的緩存類型包括:Apachenote、Apc、Db、Eaccelerator、File、Memcache、Redis、Shmop、Sqlite、Wincache和Xcache。

1.1.1不同的緩存類型以及參數(shù)

①Apachenote:host 緩存服務(wù)器地址( 默認(rèn)為127.0.0.1)

②Apc:

APC緩存擴(kuò)展,windows下面為php_apc.dll,需要先加載這個(gè)模塊,然后是在php.ini里面進(jìn)行配置:

[apc] extension=php_apc.dll apc.rfc1867 = on upload_max_filesize = 100M

post_max_size = 100M apc.max_file_size = 200M upload_max_filesize =

1000M post_max_size = 1000M max_execution_time = 600 ;

每個(gè)PHP頁面運(yùn)行的最大時(shí)間值(秒),默認(rèn)30秒 max_input_time = 600 ; 每個(gè)PHP頁面接收數(shù)據(jù)所需的最

大時(shí)間,默認(rèn)60

memory_limit = 128M ; 每個(gè)PHP頁面所吃掉的最大內(nèi)存,默認(rèn)8M

③Db:db 數(shù)據(jù)庫名稱(默認(rèn)由DB_NAME參數(shù)配置)

table 數(shù)據(jù)表名稱(默認(rèn)由DATA_CACHE_TABLE參數(shù)配置)

④Eaccelerator:

原理:

eAccelerator 通過把經(jīng)過編譯后的PHP代碼緩存到共享內(nèi)存中,并在用戶訪問的時(shí)候直接調(diào)用從而起到高效的加速作用。它的效率非常高,從創(chuàng)建共享內(nèi)存到查找編譯后的代碼 都在非常短的時(shí)間內(nèi)完成,對于不能緩存到共享內(nèi)存中的文件和代碼,eAccelerator還可以把他們緩存到系統(tǒng)磁盤上。

eAccelerator 同樣還支持PHP代碼的編譯和解釋執(zhí)行,你可以通過encoder.php腳本來對php代碼進(jìn)行編譯達(dá)到保護(hù)代碼的目的,經(jīng)過編譯后的代碼必須運(yùn)行在安 裝了eAccelerator的環(huán)境下。eAccelerator編譯后的代碼不能被反編譯,它不象其他一些編譯工具那樣可以進(jìn)行反編譯,這將使得代碼更 加安全和高效。

⑤File:temp 緩存目錄(默認(rèn)由DATA_CACHE_PATH參數(shù)配置)

⑥Memcache:

緩存初始化參數(shù)配置:

S(array('type'=>'memcache',   //類型

'host'=>'192.168.1.10', //服務(wù)器地址

'port'=>'11211',     //服務(wù)器端口

'prefix'=>'think',   //緩存標(biāo)示前綴

'expire'=>60)      //緩存有效時(shí)間);

host 緩存服務(wù)器地址( 默認(rèn)為127.0.0.1)

port 端口(默認(rèn)為MEMCACHE_PORT參數(shù)或者11211)

timeout 緩存超時(shí)(默認(rèn)由DATA_CACHE_TIME參數(shù)設(shè)置)

persistent 長連接(默認(rèn)為false)

⑦Redis:host 服務(wù)器地址(默認(rèn)由REDIS_HOST參數(shù)配置或者127.0.0.1)

port端口(默認(rèn)由REDIS_PORT參數(shù)配置或者6379)

timeout 超時(shí)時(shí)間(默認(rèn)由DATA_CACHE_TIME配置或者false)

persistent長連接(默認(rèn)為false)

⑧Shmop:size(默認(rèn)由SHARE_MEM_SIZE參數(shù)設(shè)置)

tmp(默認(rèn)為TEMP_PATH)

project (默認(rèn)為s)

length 緩存隊(duì)列長度(默認(rèn)為0)

⑨Sqlite:db 數(shù)據(jù)庫名稱(默認(rèn):memory:)

table 表名(默認(rèn)為sharedmemory)

persistent 長連接(默認(rèn)為false)

⑩Wincache:

①①Xcache:

ThinkPhp既然有不同的緩存類型,那么TP的緩存初始化可以支持的參數(shù)根據(jù)不同的緩存方式是有所區(qū)別的,常用的參數(shù)有

參數(shù)作用

expire

緩存有效期(時(shí)間為秒)

prefix

緩存標(biāo)識(shí)前綴

type

緩存類型

如果S方法不傳入type參數(shù)初始化的話,則讀取配置文件中設(shè)置的DATA_CACHE_TYPE參數(shù)值作為默認(rèn)類型。同樣的道理,prefix參數(shù)如果沒有傳入會(huì)讀取配置文件的DATA_CACHE_PREFIX參數(shù)值,expire參數(shù)沒有傳入則讀取DATA_CACHE_TIME配置值作為默認(rèn)。

2.緩存設(shè)置

//設(shè)置緩存

S('a',$value);

我們的TP會(huì)按照緩存初始化時(shí)候的參數(shù)進(jìn)行緩存數(shù)據(jù),我們也可以在緩存設(shè)置的時(shí)候改變參數(shù)

//緩存數(shù)據(jù)300秒

S('a',$value,300);

3.緩存讀取

//讀取緩存

$value = S('a');

緩存讀取的是前面緩存設(shè)置的值,這個(gè)值會(huì)受緩存初始化或者緩存設(shè)置的時(shí)候傳入的參數(shù)影響。 如果緩存標(biāo)識(shí)不存在或者已經(jīng)過期,則返回false,否則返回緩存值。

4.刪除緩存

//刪除緩存

S('a',null);

刪除緩存標(biāo)識(shí)為name的緩存數(shù)據(jù)。

5.對象方式操作緩存

//初始化緩存

$cache = S(

array('type'=>'xcache',

'prefix'=>'think',

'expire'=>600)

);$cache->name = 'value'; //設(shè)置緩存

$value = $cache->name; //獲取緩存

unset($cache->name); //刪除緩存

6.緩存隊(duì)列

S(array('type'=>'xcache', //緩存類型

'length'=>100, //限制的緩存數(shù)量

'expire'=>60)); //有效緩存時(shí)間

設(shè)置限制緩存數(shù)量,系統(tǒng)只會(huì)緩存最近的100條緩存數(shù)據(jù)。

7.快速緩存

如果我們沒有設(shè)置expire參數(shù),系統(tǒng)還提供了一個(gè)快速緩存方法F可以用來更快的操作

?F方法可以支持不同的存儲(chǔ)類型,如果是文件類型的話,默認(rèn)保存在DATA_PATH目錄下面。

7.1快速緩存Data數(shù)據(jù)

F('data',$Data);

7.2快速緩存Data數(shù)據(jù),保存到指定的目錄

F('data',$Data,TEMP_PATH);

7.3獲取緩存數(shù)據(jù)

$Data = F('data');

7.4刪除緩存數(shù)據(jù)

F('data',NULL);

7.5F方法支持自動(dòng)創(chuàng)建緩存子目錄,在DATA_PATH目錄下面緩存data數(shù)據(jù),如果User子目錄不存在,則自動(dòng)創(chuàng)建:

F('User/data',$Data);

8.查詢緩存

進(jìn)行查詢緩存的原因:對于及時(shí)性要求不高的數(shù)據(jù)查詢,我們可以使用查詢緩存功能來提高性能,而且無需自己使用緩存方法進(jìn)行緩存和獲取。

在使用查詢緩存的時(shí)候,只需要調(diào)用Model類的cache方法。

$Model->cache(true)->where('status=1')->select();

如果使用了cache(true) ,則在查詢的同時(shí)會(huì)根據(jù)當(dāng)前的查詢條件等信息生成一個(gè)帶有唯一標(biāo)識(shí)的查詢緩存,如果指定了key的話,則直接生成名稱為key的查詢緩存 :

$Model->cache('cache_name')->select();

?指定key的方式會(huì)讓查詢緩存更加高效。

?默認(rèn)情況下緩存方式采用DATA_CACHE_TYPE參數(shù)設(shè)置的緩存方式(系統(tǒng)默認(rèn)值為File表示采用文件方式緩存),緩存有效期是DATA_CACHE_TIME參數(shù)設(shè)置的時(shí)間,也可以單獨(dú)制定查詢緩存的緩存方式和有效期:

$Model->cache(true,60,'xcache')->select();

//緩存方式為xcache,并且緩存有效期為60秒

?如果指定了查詢緩存的key的話,則可以在外部通過S方法直接獲取查詢緩存的內(nèi)容

$value = S('cache_name');

select方法之外,查詢緩存還支持find和getField方法,以及他們的衍生方法

//對查詢數(shù)據(jù)緩存60秒

$Model->where($map)->cache('key',60)->find();

9.SQL解析緩存

使用SQL解析緩存的原因:如果我們的應(yīng)用有大量的SQL查詢需求,那么可以開啟SQL解析緩存以減少SQL解析提高性能。

?只有查詢方法才支持SQL解析緩存

開啟SQL解析緩存(默認(rèn)緩存方式為文件方式):

'DB_SQL_BUILD_CACHE' => true

SQL緩存還支持xcache和apc方式緩存,設(shè)置方式:

'DB_SQL_BUILD_QUEUE' => 'xcache',

'DB_SQL_BUILD_QUEUE' => 'apc',

一個(gè)項(xiàng)目的查詢SQL的量可能會(huì)非常巨大,所以有必要設(shè)置下緩存的隊(duì)列長度,設(shè)置方式:

'DB_SQL_BUILD_LENGTH' => 20, //SQL緩存的隊(duì)列長度

10.靜態(tài)緩存

要使用靜態(tài)緩存功能,需要開啟HTML_CACHE_ON參數(shù),并且使用HTML_CACHE_RULES配置參數(shù)設(shè)置靜態(tài)緩存規(guī)則文件 。

10.1靜態(tài)規(guī)則定義

定義方式:

'HTML_CACHE_ON' => true, //開啟靜態(tài)緩存

'HTML_CACHE_TIME' => 60, //全局靜態(tài)緩存有效期(秒)

'HTML_FILE_SUFFIX' => '.shtml', //設(shè)置靜態(tài)緩存文件后綴'

HTML_CACHE_RULES'=> array( // 定義靜態(tài)緩存規(guī)則

// 定義格式1 數(shù)組方式'靜態(tài)地址' => array('靜態(tài)規(guī)則', '有效期', '附加規(guī)則'),

// 定義格式2 字符串方式'靜態(tài)地址' => '靜態(tài)規(guī)則',

)

定義格式1采用數(shù)組方式 便于單獨(dú)為某個(gè)靜態(tài)規(guī)則設(shè)置不同的有效期,

定義格式2采用字符串方式訂閱靜態(tài)規(guī)則,同時(shí)采用HTML_CACHE_TIME設(shè)置的全局靜態(tài)緩存有效期。

?靜態(tài)緩存文件的根目錄在HTML_PATH定義的路徑下面,并且只有定義了靜態(tài)規(guī)則的操作才會(huì)進(jìn)行靜態(tài)緩存。 并且靜態(tài)緩存支持不同的存儲(chǔ)類型。 靜態(tài)緩存僅在GET請求下面有效。

10.2靜態(tài)地址

靜態(tài)地址定義格式:

①.定義全局的操作靜態(tài)規(guī)則

'read'=>array('{id}',60)  //定義所有的read操作的靜態(tài)規(guī)則

{id} 表示取$_GET['id'] 為靜態(tài)緩存文件名,第二個(gè)參數(shù)表示緩存60秒

②.定義全局的控制器靜態(tài)規(guī)則

'user:'=>array('User/{:action}_{id}','600') //定義所有的User控制器的靜態(tài)規(guī)則

{:action} 表示當(dāng)前的操作名稱

③定義某個(gè)控制器的操作的靜態(tài)規(guī)則

'blog:read'=>array('{id}',0)  //定義Blog控制器的read操作進(jìn)行靜態(tài)緩存

④定義全局的靜態(tài)緩存規(guī)則

'*'=>array('{$_SERVER.REQUEST_URI|md5}'),  //任何模塊的操作都適用

表示根據(jù)當(dāng)前的URL進(jìn)行緩存

10.3靜態(tài)規(guī)則

靜態(tài)規(guī)則是用于定義要生成的靜態(tài)文件的名稱,靜態(tài)規(guī)則的定義要確保不會(huì)沖突

10.3.1使用系統(tǒng)變量

包括_GET、_REQUEST、_SERVER、_SESSION、_COOKIE 格式:

{$_×××|function}

{$_GET.name}{$_SERVER.REQUEST_URI|md5}

10.3.2使用框架特定的變量

{:module}、{:controller} 和{:action} 分別表示當(dāng)前模塊名、控制器名和操作名。

{:module}/{:controller}_{:action}

10.3.3使用_GET變量

{var|function}也就是說 {id} 其實(shí)等效于 {$_GET.id}

10.3.4直接使用函數(shù){|function}

{|time}

10.3.5支持混合定義

例:定義一個(gè)靜態(tài)規(guī)則

'{id},{name|md5}'

在{}之外的字符作為字符串對待,如果包含有"/",會(huì)自動(dòng)創(chuàng)建目錄。

{:module}/{:action}_{id}

則會(huì)在靜態(tài)目錄下面創(chuàng)建模塊名稱的子目錄,然后寫入操作名_id.shtml 文件。

10.4靜態(tài)緩存有效期

單位為秒。如果不定義,則會(huì)獲取配置參數(shù)HTML_CACHE_TIME 的設(shè)置值,如果定義為0則表示永久緩存。

10.5附加規(guī)則

對靜態(tài)規(guī)則進(jìn)行函數(shù)運(yùn)算

'read'=>array('Think{id},{name}','60', 'md5')

翻譯后的靜態(tài)規(guī)則是md5('Think'.$_GET['id']. ', '.$_GET['name']);

《新程序員》:云原生和全面數(shù)字化實(shí)踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀

總結(jié)

以上是生活随笔為你收集整理的thinkphp mysql缓存_ThinkPhp数据缓存技术的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。