『壹』 怎麼修改ecshop緩存存放目錄
ECSHOP的緩存存放在templates/caches/文章夾下,時間長了這個文件夾就會非常龐大,拖慢網站速度。還有很多情況我們不需要他的緩存。本文介紹禁用ECSHOP緩存的方法。
ECSHOP的緩存有兩部分,一部分是SMARTY的頁面緩存;另一部分是sql查詢結果的緩存。這兩部分都是保存在
templates/caches/文件夾下。只要我們分別關閉這兩個功能,就可以完全禁用ECSHOP的緩存。當然你也可以根據自己的需要關閉其中某一
個。
/*1.關閉SMARTY的緩存:
打開includes/cls_template.php,找到下面一段
if (file_put_contents($this->cache_dir . 『/』 .
$cachename . 『.php』, 『<?php exit;?>』
. $data . $out) === false)
{
trigger_error(『can\』t write:』 . $this->cache_dir .
『/』 . $cachename . 『.php』);
}
--將此代碼注釋掉
2.關閉SQL查詢結果緩存
打開includes/cls_mysql.php
找到
var
$max_cache_time=3600;//最大的緩存時間,以秒為單位
改為
var $max_cache_time=0;//最大的緩存時間,以秒為單位
--------------------------------------------
如何限制或禁用ECShop緩存呢?按道理只要ftp登錄到主機空間伺服器,清除「templates/caches」文件夾下的緩存文件,但比較安全穩妥的辦法是進入ecshop網店後台點擊右上角「清除緩存」按鈕。還是完全禁用ecshop的緩存功能。
一、禁用ecshop部分數據表緩存。
ecshop里caches文件夾緩存文件包括sql查詢結果緩存和SMARTY模板頁面緩存。如果訪問網站的用戶一多,這些臨時的緩存數據都被保持在
ECshop的「templates/caches」文件夾下。數據緩存對提高網店速度有一定作用,但緩存文件一多也就過猶不及。有人說只對
favourable_activity,goods_activity這2個表禁用緩存即可。
打開include/init.php,找到
PHP代碼
$db->set_disable_cache_tables(array($ecs->table(』sessions』),
$ecs->table(』sessions_data』),
$ecs->table(』cart』)));
修改為
PHP代碼
$db->set_disable_cache_tables(array($ecs->table(』sessions』),
$ecs->table(』sessions_data』),
$ecs->table(』cart』),
$ecs->table(』favourable_activity』),
$ecs->table(』goods_activity』)));
二、完全禁用ecshop緩存
定期要登錄ecshop網店後台清除緩存文件,對於懶人來說,這也挺嫌麻煩的。那乾脆完全禁用ecshop緩存吧。參考小蟲的禁用echsop緩存文章,小蟲的具體代碼是2.6.0左右的版本。2.7的ecshop禁用緩存修改方法類似:
1. 用editplus打開include/cls_template.php,把下面代碼注釋掉:
PHP代碼
2.用editplus打開include/cls_mysql.php,找到 max_cache_time =
300,把300改為0即可
三、templates/compiled下的文件是否可以清空?
templates/compiled下的文件是模板編譯後文件,可以清空。當用戶瀏覽網店後又會重新生成。templates文件夾下的主要是caches里緩存文件太多,你可以定期清空或完全禁用ecshop緩存。
----------------------------------------------
關於清除緩存的建議!!
發現現在的清除緩存做的比較粗!和之前沒大變化啊!和2.0.5一樣.
只要後台隨便一個修改的操作,整個緩存就都沒了!用的都是$smarty->clear_all_cache();
缺點:如果我有10萬商品,:),而且都被瀏覽過,我後台一個操作就要清楚15萬多緩存文件:)似乎極限了點
只是舉例!!,希望ECSHOP更加完美而已!
smarty裡面不是有這個函數么?
clear_cache(),我小修改了下,增加了可以指定刪除某個目錄下的緩存,用處是:可方便的刪除商品的分類緩存!
2.0.5上我是這么改的,另外在根目錄建立一個緩存目錄templates_caches,裡面建立article,article_cat,goods,goods_cat,4個文件夾分別放文章內容,文章列表,商品內容,商品列表的緩存
例子:對商品,文章部分的修改
前台init.php和後台init.php加入如下代碼,我為了方便直接加在config.php裡面了
//緩存目錄設置
define('ECS_ROOT', substr(dirname(__FILE__), 0,
-8));//前後台數字當然不一樣了:)
//文章緩存
$cache_dir_article = ECS_ROOT.'./templates_caches/article';
$cache_dir_article_cat =
ECS_ROOT.'./templates_caches/article_cat';
//商品緩存
$cache_dir_goods = ECS_ROOT.'./templates_caches/goods';
$cache_dir_goods_cat =
ECS_ROOT.'./templates_caches/goods_cat';
復制代碼
前台商品內容和分類緩存時間單獨設置長一些,如內容一個月,分類1天
修改後台,商品單獨修改的地方只刪除這個商品內容的緩存
只要有修改操作就刪除商品分類緩存和首頁緩存!加入如下
$smarty->clear_cache(null, null, null, null,
$cache_dir_goods_cat);//zouql:刪除商品目錄緩存,默認緩存時間
$smarty->clear_cache('goods.html', $goods_id, null,
null, $cache_dir_goods);//zouql:刪除商品緩存,默認緩存時間
還有廣告管理等等等等等等等等地方要改!
前台用戶發表評論後自動刪除本商品緩存等等..........
function clear_cache($tpl_file = null,
$cache_id = null, $compile_id = null, $exp_time = null, $cache_dir
= null)
{
if (!isset($cache_dir))
$cache_dir = $this->cache_dir;
if (!isset($compile_id))
$compile_id = $this->compile_id;
if (!isset($tpl_file))
$compile_id = null;
$_auto_id = $this->_get_auto_id($cache_id,
$compile_id);
if (!empty($this->cache_handler_func)) {
return
call_user_func_array($this->cache_handler_func,
array('clear', &$this, &$mmy,
$tpl_file, $cache_id, $compile_id, $exp_time));
} else {
$_params = array('auto_base' => $cache_dir,
'auto_source' => $tpl_file,
'auto_id' => $_auto_id,
'exp_time' => $exp_time);
require_once(SMARTY_CORE_DIR . 'core.rm_auto.php');
return smarty_core_rm_auto($_params, $this);
}
}
『貳』 .編寫一個存儲過程,要求向銷售訂單表(sell_order)中插入一條記錄,銷售單號不能重復,由系統產生,
1.(單號由系統產生),別人應該寫了類似生產單號的存儲過程吧,你可以看看別人是怎麼寫的
2.(用戶編號、商品編號必須存在),建表時設為not null即可,
3.(並且能及時更新此商品的庫存量和銷售總量),這個建議用觸發器。
『叄』 如何實現緩存系統的更新機制
1)設計兩個緩存池,記為A、B,而A和B的內容都是從後端伺服器資料庫中獲取到的數據。正常情況下,客戶端的請求都是從緩存池A中獲取緩存內容,
同時,設置一個全局的變數ref用於記錄當前正在訪問緩存A的客戶端數量,來一個客戶端請求將ref值加1,響應完一個客戶端請求後ref減一。
2)當緩存更新時間到時,如果ref不為0,則我們不能直接更新緩存,因為這時有客戶端正在從緩存池A取數據。這里,我們可以借鑒Redis的
rehash思想,更新時間到,我們將客戶端的訪問都引導到B緩存池,此時的緩存池A不再接受新的客戶端數據請求,A的ref變數只減不增,當ref變數
減少到0時,我們便可以更新A緩存池中的內容了。
『肆』 Vue 怎麼緩存當前的組件緩存後怎麼更新說說你對keep-alive的理解是什麼
keep-alive 是 vue 中的內置組件,能在組件切換過程中將狀態保留在內存中,防止重復渲染 DOM
keep-alive 包裹動態組件時,會緩存不活動的組件實例,而不是銷毀它們
keep-alive 可以設置以下 props 屬性:
關於 keep-alive 的基本用法:
使用 includes 和 exclude :
匹配首先檢查組件自身的 name 選項,如果 name 選項不可用,則匹配它的局部注冊名稱 (父組件 components 選項的鍵值),匿名組件不能被匹配
設置了 keep-alive 緩存的組件,會多出兩個生命周期鉤子( activated 與 deactivated ):
使用原則:當我們在某些場景下不需要讓頁面重新載入時我們可以使用 keepalive
舉個栗子:
當我們從 首頁 –> 列表頁 –> 商詳頁 –> 再返回 ,這時候列表頁應該是需要 keep-alive
從 首頁 –> 列表頁 –> 商詳頁 –> 返回到列表頁(需要緩存) –> 返回到首頁(需要緩存) –> 再次進入列表頁(不需要緩存) ,這時候可以按需來控制頁面的 keep-alive
在路由中設置 keepAlive 屬性判斷是否需要緩存
使用 <keep-alive>
keep-alive 是 vue 中內置的一個組件
源碼位置:src/core/components/keep-alive.js
可以看到該組件沒有 template ,而是用了 render ,在組件渲染的時候會自動執行 render 函數
this.cache 是一個對象,用來存儲需要緩存的組件,它將以如下形式存儲:
在組件銷毀的時候執行 pruneCacheEntry 函數
在 mounted 鉤子函數中觀測 include 和 exclude 的變化,如下:
如果 include 或 exclude 發生了變化,即表示定義需要緩存的組件的規則或者不需要緩存的組件的規則發生了變化,那麼就執行 pruneCache 函數,函數如下:
在該函數內對 this.cache 對象進行遍歷,取出每一項的 name 值,用其與新的緩存規則進行匹配,如果匹配不上,則表示在新的緩存規則下該組件已經不需要被緩存,則調用 pruneCacheEntry 函數將其從 this.cache 對象剔除即可
關於 keep-alive 的最強大緩存功能是在 render 函數中實現
首先獲取組件的 key 值:
拿到 key 值後去 this.cache 對象中去尋找是否有該值,如果有則表示該組件有緩存,即命中緩存,如下:
直接從緩存中拿 vnode 的組件實例,此時重新調整該組件 key 的順序,將其從原來的地方刪掉並重新放在 this.keys 中最後一個
this.cache 對象中沒有該 key 值的情況,如下:
表明該組件還沒有被緩存過,則以該組件的 key 為鍵,組件 vnode 為值,將其存入 this.cache 中,並且把 key 存入 this.keys 中
此時再判斷 this.keys 中緩存組件的數量是否超過了設置的最大緩存數量值 this.max ,如果超過了,則把第一個緩存組件刪掉
解決方案可以有以下兩種:
每次組件渲染的時候,都會執行 beforeRouteEnter
在 keep-alive 緩存的組件被激活的時候,都會執行 actived 鉤子
注意:伺服器端渲染期間 avtived 不被調用
『伍』 電商網站商品列表頁用的是搜索引擎還是資料庫+緩存的方式
大的電商網站頁面一般都是從緩存裡面讀取過來的,頁面更新快的緩存時間比較短。
搜索頁面建議是不加緩存,或者緩存時間極短。因為用戶關鍵詞很難確定,或許高頻詞會緩存一些,這些就得看網站的部署策略了,緩存策略只是解決了資料庫訪問的壓力
除了頁面緩存之外,資料庫還需要定時更新索引,索引的更新才是決定頁面最終命中效果的關鍵,大的電商網站索引創建會很耗時,所以需要相對較長的時間才會更新一下索引系統
『陸』 sql server 2012 如何更新最後一條記錄
UPDATE表名SET欄位名=欄位值whereid=(selectmax(id)from表名)
『柒』 app store 中更新記錄怎樣刪除
以iPhone7為例:
1、清除之前是這樣的,不僅提示的有可用更新,還有更新記錄。