查看: 75|回復: 0
打印 上一主題 下一主題
收起左側

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

[復制鏈接]
跳轉到指定樓層
樓主
發表于 2020-2-2 10:36:48 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式

馬上注冊,結交更多好友,享用更多功能,讓您輕松玩轉資訊

您需要 登錄 才可以下載或查看,沒有帳號?立即注冊

x

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();
}


感謝大家一直以來對飛吧資源網的支持!http://www.553043.live
您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

QQ:2076338| 小黑屋|無圖瀏覽|手機版|飛吧地圖| 飛吧資源網

本帖部分內容轉載自其它媒體,但并不代表本站贊同其觀點和對其真實性負責
如本帖侵犯到任何版權問題,請立即告知本站,本站將及時予與刪除并致以最深的歉意

Copyright © 2011-2020 飛吧資源網 Fb93 (http://www.553043.live) All Rights Reserved.

網站備案信息:( 粵ICP備13002650號-1 )

快速回復 返回頂部 返回列表
安徽快3走势图