Discuz! 官方交流社區(qū)
標(biāo)題: discuz-redis 擴(kuò)展 輕松快速分頁(yè) 避免分頁(yè)瓶頸 (更新DXEXTEND... [打印本頁(yè)]
作者: dashen 時(shí)間: 2022-4-20 15:13
標(biāo)題: discuz-redis 擴(kuò)展 輕松快速分頁(yè) 避免分頁(yè)瓶頸 (更新DXEXTEND...
discuz-redis 擴(kuò)展 輕松快速分頁(yè) 避免分頁(yè)瓶頸 (更新DXEXTEND框架版)
discuz-redis 擴(kuò)展 輕松快速分頁(yè) 避免分頁(yè)瓶頸 (更新DXEXTEND框架版)
設(shè)計(jì)原理:
1、起因:
Discuz!X系列中,使用了SELECT * FROM pre_forum_thread WHERE fid=x AND displayorder IN ORDER BY xxx LIMIT x 這樣的sql語(yǔ)句獲取當(dāng)前頁(yè)的主題列表的。主題越多,翻頁(yè)的數(shù)字越大,在mysql中就越容易出現(xiàn)慢查詢(xún),影響性能。表中只對(duì)回帖時(shí)間字段進(jìn)行了索引,所以當(dāng)使用發(fā)帖時(shí)間、回帖數(shù)、查看數(shù)排序查看翻頁(yè)的時(shí)候,很容易出現(xiàn)慢查詢(xún)。
由于上述原因,論壇中做了限制翻頁(yè)的頁(yè)數(shù)。官網(wǎng)上目前是能翻500頁(yè),一般論壇默認(rèn)設(shè)置能翻1000頁(yè)。
2、目標(biāo):
在使用redis特性的前提下解決如下2個(gè)問(wèn)題:
1)、支持多種排序模式的翻頁(yè),不產(chǎn)生性能問(wèn)題
2)、不限翻頁(yè)數(shù)量,不產(chǎn)生性能問(wèn)題。
3)、不會(huì)改動(dòng)和破壞論壇mysql中的數(shù)據(jù),實(shí)現(xiàn)相互兼容。
3、設(shè)計(jì):
在redis中我為每個(gè)板塊創(chuàng)建了一組sorted set。包括發(fā)帖時(shí)間集合、回帖時(shí)間集合、回帖數(shù)集合、瀏覽數(shù)集合。tid為值,排序條件為分?jǐn)?shù)。每次翻頁(yè)的時(shí)候,就在板塊的對(duì)應(yīng)集合中取得一組tid。然后再使用SELECT * FROM pre_forum_thread WHERE tid IN () 獲取到帖子的其他數(shù)據(jù)。
(結(jié)構(gòu)如附件圖)
另外因?yàn)橹庙敂?shù)據(jù)的要求,在板塊的每組集合中還加了一個(gè)一級(jí)置頂集合。在整個(gè)系統(tǒng)中加了一個(gè)fid集合。
4、代碼實(shí)現(xiàn):
工具:因?yàn)閞edis數(shù)據(jù)庫(kù)需要初始化,所以單獨(dú)提供了初始化工具
1)、初始化工具php版
2)、初始化工具py版
新增類(lèi):
1)、redis底層驅(qū)動(dòng)類(lèi)
2)、redis類(lèi)
修改類(lèi):
1)、table_forum_thread 類(lèi)
通過(guò)上述新增2個(gè)數(shù)據(jù)庫(kù)類(lèi)和修改一個(gè)主題表類(lèi)就能實(shí)現(xiàn)設(shè)計(jì)中的功能。
五、結(jié)論:
目前通過(guò)測(cè)試能達(dá)到目標(biāo)中的三項(xiàng)要求。
1)、四種主題列表排序方式,不管翻頁(yè)到多少也,速度均在0.0x秒。
2)、在保證性能的前提下,可翻所有頁(yè)。
3)、和mysql實(shí)現(xiàn)無(wú)縫兼容。不影響mysql中正式數(shù)據(jù),在redis服務(wù)未啟動(dòng)的情況下自動(dòng)切換到老的分頁(yè)方式。

一、結(jié)構(gòu)
init_tools 初始化程序
init_php.php
在使用discuz-redis擴(kuò)展的時(shí)候,需要使用上述程序進(jìn)行初始化redis數(shù)據(jù)庫(kù)一次。php版、py版都行。
upload 需要上傳到web目錄的文件
二、使用前提
1、redis服務(wù)器,http://http://redis.io/
2、php-redis擴(kuò)展,https://github.com/nicolasff/phpredis
3、DXEXTEND1.1.2beta以上,http://r615.cn/thread-12045-1-1.html
三、安裝步驟
1、上傳upload文件夾中的文件到論壇根目錄
2、在 config/config_global.php 中增加如下配置
// ----------------------- CONFIG DISCUZ_REDIS ------------------------ //
$_config['extend']['discuz_redis']['on'] = 1;
$_config['discuz_redis']['server'] = '127.0.0.1';
$_config['discuz_redis']['port'] = 6379;
$_config['discuz_redis']['pconnect'] = 1;
$_config['discuz_redis']['auth'] = '';
$_config['discuz_redis']['db'] = '0';
3、上述配置好后,修改init_php.php文件分別填寫(xiě):
$mhost = '127.0.0.1'; mysql服務(wù)器地址
$muser = 'root'; mysql 用戶(hù)名
$mpw = '';
mysql密碼
$mdb = 'x25redis';
mysql中discuz數(shù)據(jù)庫(kù)名
$rhost = '127.0.0.1'; redis地址
$rport = 6379; redis端口
$_max_num_per_forum = 100000; 此項(xiàng)設(shè)置每個(gè)板塊最多顯示多少主題。如服務(wù)器內(nèi)存足夠,可填寫(xiě)較大的值,顯示所有主題。
4、在服務(wù)器上執(zhí)行init_php.php同步redis數(shù)據(jù),例如/usr/local/php/bin/php /usr/local/src/init_php.php
按數(shù)據(jù)量大小大概遇到幾十秒到幾分種時(shí)間。建議在數(shù)據(jù)庫(kù)服務(wù)器負(fù)載低的時(shí)候運(yùn)行。
5、在Linux服務(wù)器上設(shè)置計(jì)劃任務(wù),每天半夜運(yùn)行一次init_php.php文件保證redis數(shù)據(jù)同步。時(shí)間點(diǎn)可以自定,建議凌晨3點(diǎn)或者4點(diǎn)。
四、關(guān)閉與啟動(dòng)
$_config['extend']['discuz_redis']['on'] = 1; 1為啟動(dòng),0為停止
五、注意事項(xiàng)
1,目前的版本不能和 innodb 插件一起用,這個(gè)問(wèn)題會(huì)在下一版本中解決。2,該插件針對(duì)大數(shù)據(jù)大訪問(wèn)量,數(shù)據(jù)庫(kù)壓力比較大的站點(diǎn),如果沒(méi)有性能問(wèn)題則不建議使用,維護(hù)redis需要比較專(zhuān)業(yè)的技術(shù)。如果盲目使用反而適得其反。
(, 下載次數(shù): 373)
作者: pcyi 時(shí)間: 2022-4-23 21:24
這個(gè)框架老早發(fā)布的,不知道X3.5還能用嗎?
作者: ysx24 時(shí)間: 2022-4-24 09:41
本帖最后由 ysx24 于 2022-4-24 10:08 編輯
剛開(kāi)始我還以為技術(shù)新帖,心情澎湃的看完貼子后,返回列表發(fā)現(xiàn)一堆同類(lèi)墳貼,不應(yīng)該叫墳貼了,應(yīng)該是考古級(jí)別塵封的歷史,向前追溯的歷史源遠(yuǎn)流長(zhǎng),管理大大正在鍥而不舍的嘗試發(fā)掘此版塊文獻(xiàn)記載,考古帖的發(fā)表逐漸醞釀中……樓主深刻領(lǐng)略越是遠(yuǎn)古越值錢(qián),破舊的古董遠(yuǎn)比精美的現(xiàn)代物更有價(jià)值,樓主領(lǐng)略了真諦,并且?guī)У搅颂赢?dāng)中,管理大大此版帖子古樸信息迎面而來(lái),讓我仿佛看見(jiàn)華夏五千年的歷史滄桑
看了看管理大大此版塊的其它帖子,有著新時(shí)代的我們,有些欣欣向榮的憧憬看到帖子瞬間感到三花聚頂,追憶大唐
-----
雖是調(diào)侃卻無(wú)嘲諷之意,也無(wú)一字復(fù)制,全部手寫(xiě),管理大大手下留情啊
作者: sosoba 時(shí)間: 2022-4-24 22:27
直接用云數(shù)據(jù)庫(kù)redis 可以嗎
在 config/config_global.php 直接配置云數(shù)據(jù)庫(kù) redisd 內(nèi)網(wǎng)IP和密碼
這樣就可以用云數(shù)據(jù)庫(kù)了 可以緩解壓力
請(qǐng)問(wèn)這樣可以嗎
作者: dashen 時(shí)間: 2022-4-25 00:54
dz原本應(yīng)該就能用吧
歡迎光臨 Discuz! 官方交流社區(qū) (http://r615.cn/) |
Powered by Discuz! X5.0 |