久久久久av_欧美日韩一区二区在线_国产精品三区四区_日韩中字在线

返回列表 發(fā)帖
查看: 3362|回復(fù): 4

discuz-redis 擴(kuò)展 輕松快速分頁 避免分頁瓶頸 (更新DXEXTEND...

56

主題

1470

回帖

3萬

積分

管理員

貢獻(xiàn)
2074 點(diǎn)
金幣
1389 個(gè)
樓主
發(fā)表于 2022-4-20 15:13:50 | 只看樓主 |倒序?yàn)g覽 |閱讀模式
discuz-redis 擴(kuò)展 輕松快速分頁 避免分頁瓶頸 (更新DXEXTEND框架版)

discuz-redis 擴(kuò)展 輕松快速分頁 避免分頁瓶頸 (更新DXEXTEND框架版)

設(shè)計(jì)原理:

1、起因:
Discuz!X系列中,使用了SELECT * FROM pre_forum_thread WHERE fid=x AND displayorder IN ORDER BY xxx LIMIT x 這樣的sql語句獲取當(dāng)前頁的主題列表的。主題越多,翻頁的數(shù)字越大,在mysql中就越容易出現(xiàn)慢查詢,影響性能。表中只對(duì)回帖時(shí)間字段進(jìn)行了索引,所以當(dāng)使用發(fā)帖時(shí)間、回帖數(shù)、查看數(shù)排序查看翻頁的時(shí)候,很容易出現(xiàn)慢查詢。
由于上述原因,論壇中做了限制翻頁的頁數(shù)。官網(wǎng)上目前是能翻500頁,一般論壇默認(rèn)設(shè)置能翻1000頁。

2、目標(biāo):
在使用redis特性的前提下解決如下2個(gè)問題:
1)、支持多種排序模式的翻頁,不產(chǎn)生性能問題
2)、不限翻頁數(shù)量,不產(chǎ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ù)。每次翻頁的時(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ù)庫需要初始化,所以單獨(dú)提供了初始化工具
1)、初始化工具php版
2)、初始化工具py版
新增類:
1)、redis底層驅(qū)動(dòng)類
2)、redis類
修改類:
1)、table_forum_thread 類
通過上述新增2個(gè)數(shù)據(jù)庫類和修改一個(gè)主題表類就能實(shí)現(xiàn)設(shè)計(jì)中的功能。

五、結(jié)論:
目前通過測(cè)試能達(dá)到目標(biāo)中的三項(xiàng)要求。
1)、四種主題列表排序方式,不管翻頁到多少也,速度均在0.0x秒。
2)、在保證性能的前提下,可翻所有頁。
3)、和mysql實(shí)現(xiàn)無縫兼容。不影響mysql中正式數(shù)據(jù),在redis服務(wù)未啟動(dòng)的情況下自動(dòng)切換到老的分頁方式。



一、結(jié)構(gòu)
init_tools 初始化程序
init_php.php
在使用discuz-redis擴(kuò)展的時(shí)候,需要使用上述程序進(jìn)行初始化redis數(shù)據(jù)庫一次。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://www.9999xn.com/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文件分別填寫:
$mhost = '127.0.0.1'; mysql服務(wù)器地址
$muser = 'root'; mysql 用戶名
$mpw = '';
mysql密碼
$mdb = 'x25redis';
mysql中discuz數(shù)據(jù)庫名
$rhost = '127.0.0.1'; redis地址
$rport = 6379;  redis端口
$_max_num_per_forum = 100000; 此項(xiàng)設(shè)置每個(gè)板塊最多顯示多少主題。如服務(wù)器內(nèi)存足夠,可填寫較大的值,顯示所有主題。

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ù)庫服務(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è)問題會(huì)在下一版本中解決。2,該插件針對(duì)大數(shù)據(jù)大訪問量,數(shù)據(jù)庫壓力比較大的站點(diǎn),如果沒有性能問題則不建議使用,維護(hù)redis需要比較專業(yè)的技術(shù)。如果盲目使用反而適得其反。

discuz-redis-dxextend.zip (7.93 KB, 下載次數(shù): 252)

回復(fù)

使用道具 舉報(bào)

41

主題

821

回帖

1015

積分

已臻大成

貢獻(xiàn)
11 點(diǎn)
金幣
33 個(gè)
沙發(fā)
發(fā)表于 2022-4-23 21:24:56 | 只看Ta
這個(gè)框架老早發(fā)布的,不知道X3.5還能用嗎?
回復(fù)

使用道具 舉報(bào)

322

主題

1341

回帖

1849

積分

已臻大成

貢獻(xiàn)
12 點(diǎn)
金幣
10 個(gè)
板凳
發(fā)表于 2022-4-24 09:41:58 來自手機(jī) | 只看Ta
本帖最后由 ysx24 于 2022-4-24 10:08 編輯

剛開始我還以為技術(shù)新帖,心情澎湃的看完貼子后,返回列表發(fā)現(xiàn)一堆同類墳貼,不應(yīng)該叫墳貼了,應(yīng)該是考古級(jí)別塵封的歷史,向前追溯的歷史源遠(yuǎn)流長(zhǎng),管理大大正在鍥而不舍的嘗試發(fā)掘此版塊文獻(xiàn)記載,考古帖的發(fā)表逐漸醞釀中……樓主深刻領(lǐng)略越是遠(yuǎn)古越值錢,破舊的古董遠(yuǎn)比精美的現(xiàn)代物更有價(jià)值,樓主領(lǐng)略了真諦,并且?guī)У搅颂赢?dāng)中,管理大大此版帖子古樸信息迎面而來,讓我仿佛看見華夏五千年的歷史滄桑

看了看管理大大此版塊的其它帖子,有著新時(shí)代的我們,有些欣欣向榮的憧憬看到帖子瞬間感到三花聚頂,追憶大唐
-----
雖是調(diào)侃卻無嘲諷之意,也無一字復(fù)制,全部手寫,管理大大手下留情啊
回復(fù)

使用道具 舉報(bào)

60

主題

126

回帖

224

積分

爐火純青

貢獻(xiàn)
0 點(diǎn)
金幣
31 個(gè)
地板
發(fā)表于 2022-4-24 22:27:53 | 只看Ta
直接用云數(shù)據(jù)庫redis 可以嗎  
在 config/config_global.php 直接配置云數(shù)據(jù)庫 redisd 內(nèi)網(wǎng)IP和密碼

這樣就可以用云數(shù)據(jù)庫了 可以緩解壓力

請(qǐng)問這樣可以嗎
回復(fù)

使用道具 舉報(bào)

56

主題

1470

回帖

3萬

積分

管理員

貢獻(xiàn)
2074 點(diǎn)
金幣
1389 個(gè)
5#
 樓主| 發(fā)表于 2022-4-25 00:54:57 | 只看Ta
sosoba 發(fā)表于 2022-4-24 22:27
直接用云數(shù)據(jù)庫redis 可以嗎  
在 config/config_global.php 直接配置云數(shù)據(jù)庫 redisd 內(nèi)網(wǎng)IP和密碼

dz原本應(yīng)該就能用吧
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

  • 關(guān)注公眾號(hào)
  • 有償服務(wù)微信
  • 有償服務(wù)QQ

手機(jī)版|小黑屋|Discuz! 官方交流社區(qū) ( 皖I(lǐng)CP備16010102號(hào) |皖公網(wǎng)安備34010302002376號(hào) )|網(wǎng)站地圖|star

GMT+8, 2025-7-2 21:08 , Processed in 0.057054 second(s), 14 queries , Redis On.

Powered by Discuz! W1.0 Licensed

Cpoyright © 2001-2025 Discuz! Team.

關(guān)燈 在本版發(fā)帖
有償服務(wù)QQ
有償服務(wù)微信
返回頂部
快速回復(fù) 返回頂部 返回列表