Discuz!使用Redis緩存多站點分庫和避免清空所有的數據的解決方案

Discuz!內存級緩存介紹
緩存層的引入是爲了解決MYSQL自身對高併發處理的性能瓶頸,目前產品緩存層採用主流的Key-Value對形式,內存級的緩存產品很多,支持的內存優化接口有 Memcache、eAccelerator、Alternative PHP Cache(APC)、Xcache、Redis 五種,優化系統將會依據當前服務器環境依次選用接口,單服務器環境中推薦使用APC,多服務器環境中推薦使用Redis或Memcache。

現存問題說明
有不少站長在一個服務器上安裝多個站點,且同時使用Redis作爲緩存過程中發現,當使用後臺->全局->性能優化->內存優化->內存清理,會把redis緩存的全部站點的內容都清空。


原來是因爲Discuz!在實現的時候沒用使用Redis的分庫功能,全部站點的緩存都是放在db0中,好在Discuz!源碼中已經做好了分庫選擇,只需要很少的改動進達到我們分庫的要求了。

改進方案
具體實現如下:
1、修改文件config\config_global.php
在$_config['memory']['redis']['serializer'] = 1;下方增加一行
$_config['memory']['redis']['db'] = 1;//這裏可以填寫0到15的數字,每個站點使用不同的,redis默認是16個庫,也可以增加庫

2、修改文件source\class\memory\memory_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();
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章