<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??一站式輕松地調用各大LLM模型接口,支持GPT4、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                在項目中,合理的使用緩存對性能有較大的幫助。ThinkPHP提供了方便的緩存方式,包括數據緩存、靜態緩存和查詢緩存等,支持包括文件方式、APC、Db、Memcache、Shmop、Sqlite、Redis、Eaccelerator和Xcache在內的動態數據緩存類型,以及可定制的靜態緩存規則,并提供了快捷方法進行存取操作。 # 數據緩存 在ThinkPHP中進行緩存操作,一般情況下并不需要直接操作緩存類,因為系統內置對緩存操作進行了封裝,直接采用S方法即可,例如: ## 緩存初始化 ~~~ // 緩存初始化 S(array('type'=>'xcache','expire'=>60)); ~~~ 緩存初始化可以支持的參數根據不同的緩存方式有所區別,常用的參數是: | 參數 | 描述 | |-----|-----| | expire | 緩存有效期(時間為秒) | | prefix | 緩存標識前綴 | | type | 緩存類型 | 系統目前已經支持的緩存類型包括:`Apachenote、Apc、Db、Eaccelerator、File、Memcache、Redis、Shmop、Sqlite、Wincache和Xcache`。 如果S方法不傳入type參數初始化的話,則讀取配置文件中設置的`DATA_CACHE_TYPE`參數值作為默認類型。同樣的道理,prefix參數如果沒有傳入會讀取配置文件的`DATA_CACHE_PREFIX`參數值,expire參數沒有傳入則讀取`DATA_CACHE_TIME`配置值作為默認。 有些緩存方式會有一些自身特殊的參數,例如Memcache緩存,還需要配置其他的參數: ~~~ S(array( 'type'=>'memcache', 'host'=>'192.168.1.10', 'port'=>'11211', 'prefix'=>'think', 'expire'=>60) ); ~~~ 對于全局的緩存方式,一般我們建議添加prefix(緩存前綴)參數用以區分不同的應用,以免混淆。 ## 緩存設置 ~~~ // 設置緩存 S('name',$value); ~~~ 會按照緩存初始化時候的參數進行緩存數據,也可以在緩存設置的時候改變參數,例如: ~~~ // 緩存數據300秒 S('name',$value,300); ~~~ 甚至改變之前的緩存方式或者更多的參數: ~~~ // 采用文件方式緩存數據300秒 S('name',$value,array('type'=>'file','expire'=>300)); ~~~ 如果你在緩存設置的時候采用上面的數組方式傳入參數的話,會影響到后面的緩存存取。 ## 緩存讀取 ~~~ // 讀取緩存 $value = S('name'); ~~~ 緩存讀取的是前面緩存設置的值,這個值會受緩存初始化或者緩存設置的時候傳入的參數影響。 如果緩存標識不存在或者已經過期,則返回false,否則返回緩存值。 ## 緩存刪除 ~~~ // 刪除緩存 S('name',null); ~~~ 刪除緩存標識為name的緩存數據。 ## 對象方式操作緩存 我們可以采用對象方式操作緩存,例如: ~~~ // 初始化緩存 $cache = S(array('type'=>'xcache','prefix'=>'think','expire'=>600)); $cache->name = 'value'; // 設置緩存 $value = $cache->name; // 獲取緩存 unset($cache->name); // 刪除緩存 ~~~ > 如果你設置了緩存前綴的話,對應的緩存操作只是對應該緩存前綴標識的,不會影響其他的緩存。 ## 關于文件緩存方式的安全機制 如果你使用的是文件方式的緩存機制,那么可以設置DATA_CACHE_KEY參數,避免緩存文件名被猜測到,例如: ~~~ 'DATA_CACHE_KEY'=>'think' ~~~ ## 緩存隊列 數據緩存可以支持緩存隊列,簡單的說就是可以限制緩存的數量,只需要在初始化的時候指定`length`參數: ~~~ S(array('type'=>'xcache','length'=>100,'expire'=>60)); ~~~ 設置了`length`參數后,系統只會緩存最近的100條緩存數據。 # 快速緩存 如果你的存儲數據沒有有效期的需求,那么系統還提供了一個快速緩存方法F可以用來更快的操作。 > F方法可以支持不同的存儲類型,如果是文件類型的話,默認保存在DATA_PATH目錄下面。 快速緩存Data數據 ~~~ F('data',$Data); ~~~ 快速緩存Data數據,保存到指定的目錄 ~~~ F('data',$Data,TEMP_PATH); ~~~ 獲取緩存數據 ~~~ $Data = F('data'); ~~~ 刪除緩存數據 ~~~ F('data',NULL); ~~~ F方法支持自動創建緩存子目錄,在`DATA_PATH`目錄下面緩存data數據,如果User子目錄不存在,則自動創建: ~~~ F('User/data',$Data); ~~~ 系統內置的數據字段信息緩存就是用了快速緩存機制。 # 查詢緩存 對于及時性要求不高的數據查詢,我們可以使用查詢緩存功能來提高性能,而且無需自己使用緩存方法進行緩存和獲取。 查詢緩存功能支持所有的數據庫,并且支持所有的緩存方式和有效期。 在使用查詢緩存的時候,只需要調用Model類的cache方法,例如: ~~~ $Model->cache(true)->where('status=1')->select(); ~~~ 如果使用了`cache(true)` ,則在查詢的同時會根據當前的查詢條件等信息生成一個帶有唯一標識的查詢緩存,如果指定了key的話,則直接生成名稱為key的查詢緩存 ,例如: ~~~ $Model->cache('cache_name')->select(); ~~~ > 指定key的方式會讓查詢緩存更加高效。 默認情況下緩存方式采用**DATA_CACHE_TYPE**參數設置的緩存方式(系統默認值為File表示采用文件方式緩存),緩存有效期是**DATA_CACHE_TIME**參數設置的時間,也可以單獨制定查詢緩存的緩存方式和有效期: ~~~ $Model->cache(true,60,'xcache')->select(); ~~~ 表示當前查詢緩存的緩存方式為xcache,并且緩存有效期為60秒。 同樣的查詢,如果沒有使用cache方法,則不會獲取或者生成任何緩存,即便是之前調用過Cache方法。 如果指定了查詢緩存的key的話,則可以在外部通過S方法直接獲取查詢緩存的內容,例如: ~~~ $value = S('cache_name'); ~~~ 除了select方法之外,查詢緩存還支持find和getField方法,以及他們的衍生方法(包括統計查詢和動態查詢方法)。 ~~~ // 對查詢數據緩存60秒 $Model->where($map)->cache('key',60)->find(); ~~~ 具體應用的時候可以根據需要選擇緩存方式和緩存有效期。 # SQL解析緩存 除了查詢緩存之外,ThinkPHP還支持SQL解析緩存,因為ThinkPHP的ORM機制,所有的SQL都是動態生成的,然后由數據庫驅動執行。 所以如果你的應用有大量的SQL查詢需求,那么可以開啟SQL解析緩存以減少SQL解析提高性能。要開啟SQL解析緩存,只需要設置: ~~~ 'DB_SQL_BUILD_CACHE' => true, ~~~ 即可開啟數據庫查詢的SQL創建緩存,默認緩存方式為文件方式,還可以支持xcache和apc方式緩存,只需要設置: ~~~ 'DB_SQL_BUILD_QUEUE' => 'xcache', ~~~ 我們知道,一個項目的查詢SQL的量可能會非常巨大,所以有必要設置下緩存的隊列長度,例如,我們希望SQL解析緩存不超過20條記錄,可以設置: ~~~ 'DB_SQL_BUILD_LENGTH' => 20, // SQL緩存的隊列長度 ~~~ > 注意:只有查詢方法才支持SQL解析緩存 # 靜態緩存 要使用靜態緩存功能,需要開啟`HTML_CACHE_ON`參數,并且使用`HTML_CACHE_RULES`配置參數設置靜態緩存規則文件 。 > 雖然也可以在應用配置文件中定義靜態緩存規則,但是建議是在模塊配置文件中為不同的模塊定義靜態緩存規則。 ## 靜態規則定義 靜態規則的定義方式如下: ~~~ 'HTML_CACHE_ON' => true, // 開啟靜態緩存 'HTML_CACHE_TIME' => 60, // 全局靜態緩存有效期(秒) 'HTML_FILE_SUFFIX' => '.shtml', // 設置靜態緩存文件后綴 'HTML_CACHE_RULES' => array( // 定義靜態緩存規則 // 定義格式1 數組方式 '靜態地址' => array('靜態規則', '有效期', '附加規則'), // 定義格式2 字符串方式 '靜態地址' => '靜態規則', ) ~~~ 定義格式1采用數組方式 便于單獨為某個靜態規則設置不同的有效期,定義格式2采用字符串方式訂閱靜態規則,同時采用`HTML_CACHE_TIME`設置的全局靜態緩存有效期。 > 靜態緩存文件的根目錄在`HTML_PATH`定義的路徑下面,并且只有定義了靜態規則的操作才會進行靜態緩存。 并且靜態緩存支持不同的存儲類型。 靜態緩存僅在GET請求下面有效。 ### 靜態地址 靜態地址包括下面幾種定義格式: 第一種是定義全局的操作靜態規則,例如定義所有的read操作的靜態規則為: ~~~ 'read'=>array('{id}',60) ~~~ 其中,`{id}` 表示取`$_GET['id']` 為靜態緩存文件名,第二個參數表示緩存60秒。 第二種是定義全局的控制器靜態規則,例如定義所有的User控制器的靜態規則為: ~~~ 'user:'=>array('User/{:action}_{id}','600') ~~~ 其中,`{:action}` 表示當前的操作名稱 第三種是定義某個控制器的操作的靜態規則,例如,我們需要定義Blog控制器的read操作進行靜態緩存 ~~~ 'blog:read'=>array('{id}',0) ~~~ 第四種方式是定義全局的靜態緩存規則,這個屬于特殊情況下的使用,任何模塊的操作都適用,例如 ~~~ '*'=>array('{$_SERVER.REQUEST_URI|md5}'), ~~~ 表示根據當前的URL進行緩存。 ### 靜態規則 靜態規則是用于定義要生成的靜態文件的名稱,靜態規則的定義要確保不會沖突,寫法可以包括以下情況: ### 1、使用系統變量 包括 `_GET`、`_REQUEST`、`_SERVER`、`_SESSION`、`_COOKIE` 格式: ~~~ {$_×××|function} ~~~ 例如: ~~~ {$_GET.name} {$_SERVER.REQUEST_URI|md5} ~~~ ### 2、使用框架特定的變量 `{:module}` 、`{:controller}` 和`{:action}` 分別表示當前模塊名、控制器名和操作名。 例如: ~~~ {:module}/{:controller}_{:action} ~~~ ### 3、使用_GET變量 `{var|function}`也就是說 `{id}` 其實等效于 `{$_GET.id}` #### 4、直接使用函數 {|function} 例如: ~~~ {|time} ~~~ ### 5、支持混合定義 例如我們可以定義一個靜態規則為: ~~~ '{id},{name|md5}' ~~~ 在{}之外的字符作為字符串對待,如果包含有"/",會自動創建目錄。 例如,定義下面的靜態規則: ~~~ {:module}/{:action}_{id} ~~~ 則會在靜態目錄下面創建模塊名稱的子目錄,然后寫入操作名_id.shtml 文件。 ### 靜態緩存有效期 單位為秒。如果不定義,則會獲取配置參數`HTML_CACHE_TIME` 的設置值,如果定義為0則表示永久緩存。 ### 附加規則 通常用于對靜態規則進行函數運算,例如 ~~~ 'read'=>array('Think{id},{name}','60', 'md5') ~~~ 翻譯后的靜態規則是 `md5('Think'.$_GET['id']. ', '.$_GET['name']);`
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看