Discuz!內存級緩存介紹
緩存層的引入是為了解決MYSQL自身對高并發處理的性能瓶頸,目前產品緩存層采用主流的Key-Value對形式,內存級的緩存產品很多,支持的內存優化接口有 Memcache、eAccelerator、Alternative PHP Cache(APC)、Xcache、Redis 五種,優化系統將會依據當前服務器環境依次選用接口,單服務器環境中推薦使用APC,多服務器環境中推薦使用Redis或Memcache。
現存問題說明
有不少站長在一個服務器上安裝多個站點,且同時使用Redis作為緩存過程中發現,當使用后臺->全局->性能優化->內存優化->內存清理,會把redis緩存的全部站點的內容都清空。
原來是因為Discuz!在實現的時候沒用使用Redis的分庫功能,全部站點的緩存都是放在db0中,好在Discuz!源碼中已經做好了分庫選擇,只需要很少的改動進達到我們分庫的要求了。
改進方案
具體實現如下:
1、修改文件configconfig_global.php
在$_config['memory']['redis']['serializer'] = 1;下方增加一行
$_config['memory']['redis']['db'] = 1;//這里可以填寫0到15的數字,每個站點使用不同的,redis默認是16個庫,也可以增加庫
2、修改文件sourceclassmemorymemory_driver_redis.php
在 @$this->obj->setOption(Redis::OPT_SERIALIZER, $config['serializer']); 下方加上一行
$this->select($config['db']);
3、將flushAll改成flushdb避免后臺清理影響全部站點;
function clear() {
return $this->obj->flushAll();
}
改成
function clear() {
return $this->obj->flushdb();
}