課程配套-3.論壇構(gòu)建示例_第1頁
課程配套-3.論壇構(gòu)建示例_第2頁
課程配套-3.論壇構(gòu)建示例_第3頁
課程配套-3.論壇構(gòu)建示例_第4頁
課程配套-3.論壇構(gòu)建示例_第5頁
免費預(yù)覽已結(jié)束,剩余29頁可下載查看

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)

文檔簡介

構(gòu)建介紹如何使用Redis

去構(gòu)建一個小象科技讓你的數(shù)據(jù)產(chǎn)生價值V2EX小象科技讓你的數(shù)據(jù)產(chǎn)生價值主要功能用戶賬號創(chuàng)建帖子、回復(fù)帖子、為帖子投票為帖子分類,查看屬于特定分類的帖子的帖子將多個分類(category)歸類至某個

(tab),查看屬于特定熱議帖子

榜基于算法的帖子小象科技讓你的數(shù)據(jù)產(chǎn)生價值小象科技讓你的數(shù)據(jù)產(chǎn)生價值創(chuàng)建用戶賬號用戶賬號示例小象科技讓你的數(shù)據(jù)產(chǎn)生價值賬號V2EX

賬號要求輸入用戶名、和電子郵件地址,并且用戶名和電子郵件地址必須是未被使用的,這和的賬號要求一樣。因此,

可以重用之前的UniqueSet類來保證用戶名和電子郵件地址的唯一性,并重用之前的

User

類來創(chuàng)建賬號。小象科技讓你的數(shù)據(jù)產(chǎn)生價值小象科技讓你的數(shù)據(jù)產(chǎn)生價值創(chuàng)建帖子帖子示例一個帖子的構(gòu)成部分:分類標(biāo)題用戶的投票數(shù)量作者點擊量內(nèi)容TAG小象科技讓你的數(shù)據(jù)產(chǎn)生價值創(chuàng)建帖子、點擊量、標(biāo)題、作,……”程序會為用戶創(chuàng)建的每個帖子分配一個唯一的帖子ID

,然后將帖子ID

、者的

ID、內(nèi)容、分類、TAG

等信息 到格式為

bbs::topic::<id>

的散列鍵里面。HMSET

bbs::topic::131853

id

131853time

1410165226click_counter

0title“WordPress

4.0\“Benny\”正式版發(fā)布……”author_id

48771content“WordPress

4.0

簡體中文版現(xiàn)已開放category

“WordPress”tags

JSON([“WordPress”,“簡體”,“benny”])其中

tags

屬性為JSON列表。小象科技讓你的數(shù)據(jù)產(chǎn)生價值查看帖子(tag)來展示,V2EX

使用了兩種方式來展示帖子,一種是按照分類(category)來展示,另一種是按接下來 逐一實現(xiàn)這兩種展示帖子的方式。小象科技讓你的數(shù)據(jù)產(chǎn)生價值小象科技讓你的數(shù)據(jù)產(chǎn)生價值根據(jù)分類展示帖子WordPress

分類,以及該分類屬下的帖子分類頁面會根據(jù)帖子最后一次被回復(fù)的時間來排序帖子。小象科技讓你的數(shù)據(jù)產(chǎn)生價值分類帖子為了同一分類的帖子,并按照帖子最后一次被回復(fù)的

時間

排列帖子,程序會為每個分類創(chuàng)建一個鍵名為bbs::category::<name>的有序集合,其中有序集合的元素為帖子的ID,而元素的分值則是帖子最后一次被回復(fù)的UNIX

時間戳。例子,將最后一次回復(fù)時間為1410165226

,ID

為131853

的帖子歸到WordPress

分類里面:ZADD

bbs::category::WordPress

1410165226

131853因為同一分類的帖子會被 起來,所以程序只要對有序集合調(diào)用

ZREVRANGE命令,就可以按照回復(fù)時間從新到舊的順序,取出屬于同一分類的多個帖子。可以將這些針對分類的操作抽象為Category

類。小象科技讓你的數(shù)據(jù)產(chǎn)生價值小象科技讓你的數(shù)據(jù)產(chǎn)生價值Category

類APIAPI作用實現(xiàn)原理Category(client,

name)設(shè)置客戶端以及分類的名字。include_topic(topic_id)將給定的帖子添加到當(dāng)前分類中。ZADDis_included(topic_id)檢查給定的帖子是否屬于當(dāng)前分類。使用ZSCORE

檢查有序集合中,topic_id

對應(yīng)的分值是否存在,如果不存在,那么帖子不屬于該分類。count_topic()返回當(dāng)前分類包含的帖子數(shù)量。ZCARDpaging(n,

count)按count

個帖子為一頁,返回該分類第n頁的帖子。ZREVRANGE小象科技讓你的數(shù)據(jù)產(chǎn)生價值Category

類使用示例>>>

wordpress_category

=Category(client,

“WordPress”)>>>

wordpress_category.include_topic(131853)>>>

wordpress_category.is_included(131853)True>>>

wordpress_category.count_topic()148按照展示帖子小象科技讓你的數(shù)據(jù)產(chǎn)生價值功能V2EX

的主頁使用不同的

(tab)來展示不同類型的帖子。一個

可以包含多

個分類,而屬于被包含分類的帖子會出現(xiàn)在標(biāo)簽的列表里面。小象科技讓你的數(shù)據(jù)產(chǎn)生價值功能的實現(xiàn)實現(xiàn)功能需要兩個步驟:。記錄

和分類之間的關(guān)系。舉個例子,程序要記住,“程序員”、“Linux”、“node.js”這些分類都屬于“技術(shù)”記錄

屬下的帖子,當(dāng)用戶點擊某個

時,展示該

屬下的各個帖子。舉個例子,帖子

132312

屬于“程序員”分類,而該分類又屬于“技術(shù)”

,所以程序應(yīng)該在用戶點擊“技術(shù)”頁面時,展示出帖子132312

。小象科技讓你的數(shù)據(jù)產(chǎn)生價值功能的實現(xiàn)所為了記錄有屬于name和分類之間的關(guān)系,程序會使用一個鍵名為bbs::tab::<name>::member

的集合來的分類,集合中的每個元素都是一個分類名。比如

bbs::tab::技術(shù)::member

這個集合就包含了

“程序員”、“Linux”、“node.js”

等分類的名字,通過這個集合,程序可以知道哪些分類屬于“技術(shù)”

。另一方面,為了記錄來

屬于

name屬下的帖子,程序會使用一個鍵名為bbs::tab::<name>::topic_list

的有序集合的所有帖子,其中有序集合的元素

為帖子的ID

,元素的分值為帖子最后一次被回復(fù)時的UNIX

時間戳。,所以程序會在創(chuàng)建該帖子時,執(zhí)行以比如帖子

132312

屬于“程序員”分類,而該分類又屬于“技術(shù)”下命令,將該帖子添加到“技術(shù)”

的帖子列表里面:ZADD

bbs::tab::技術(shù)::topic_list

1410165226

132312小象科技讓你的數(shù)據(jù)產(chǎn)生價值Tab

類APIAPI作用實現(xiàn)原理Tab(client,

tab_name)設(shè)置客戶端和

的名字。add_member(category_name)將給定的分類添加到當(dāng)前

里面。SADDis_member(category_name)檢查給定的分類是否屬于當(dāng)前

。SISMEMBERget_all_member()返回當(dāng)前 包含的所有分類。SMEMBERScount_member()返回 包含的分類數(shù)量。SCARDinclude_topic(category_name,

topic_id)將給定分類的帖子添加到當(dāng)前

的帖子列表里面。ZADDpaging(n,

count)返回

包含的帖子。ZREVRANGEcount_topic()返回

目前包含的帖子數(shù)量。ZCARD小象科技讓你的數(shù)據(jù)產(chǎn)生價值小象科技讓你的數(shù)據(jù)產(chǎn)生價值Tab

類使用示例>>>tech_tab=Tab(client,“技術(shù)”)>>>tech_tab.add_member(“程序員”)>>>

tech_tab.add_member(“node.js”)>>>

tech_tab.add_member(“Linux”)>>>tech_tab.is_member(“程序員”)True>>>tech_tab.include_topic(“程序員”,132312)小象科技讓你的數(shù)據(jù)產(chǎn)生價值回復(fù)帖子回復(fù)示例用戶可以對帖子進行回復(fù)。每條回復(fù)會至少會包含作者、回復(fù)時間和回復(fù)內(nèi)容這些信息。并且每個帖子都需要一個列表來

所有回復(fù)。這和

之前為了實現(xiàn)評論而創(chuàng)建的

Comment

類和CommentList

類的需求基本相同,所以只要對這兩個類進行一些簡單的修改,就可以重用它們了。小象科技讓你的數(shù)據(jù)產(chǎn)生價值小象科技讓你的數(shù)據(jù)產(chǎn)生價值為帖子投票投票示例在之前介紹集合的時候,就

怎樣使用集合來實現(xiàn)投票功能,并在課后練習(xí)中實現(xiàn)了可以投支持票和

票的UpDownVote

類。只要對UpDownVote

類稍作修改,就可以直接重用這個類的代碼了。小象科技讓你的數(shù)據(jù)產(chǎn)生價值熱議帖子小象科技讓你的數(shù)據(jù)產(chǎn)生價值熱議帖子榜示例榜展示了每天回復(fù)數(shù)量最多的帖子,這個熱議帖子榜每天更新一次。為了實現(xiàn)這個 榜,程序需要使用一個鍵名為

bbs::reply_day_rank

的有序集合,其中有序集合的元素為帖子的ID

,而元素的分值則是帖子在當(dāng)前被回復(fù)的數(shù)量。每當(dāng)ID

為N的帖子新增一條回復(fù)時,程序就執(zhí)行以下命令來增加帖子在

榜中的回復(fù)數(shù)量:ZINCRBY

bbs::reply_day_rank

N

1并且程序會為

bbs:reply_day_rank

設(shè)置生存時間,讓它在一天之后自動過期,并自動創(chuàng)建新

。這可以通過修改并重用之前介紹過的DayRank

類來實現(xiàn)。小象科技讓你的數(shù)據(jù)產(chǎn)生價值ReplyDayRank

類API>>>

rank

=

ReplyDayRank(client)>>>

rank.incr_reply_count(10086)>>>

rank.incr_reply_count(12345)>>>

rank.incr_reply_count(99999)#ID

為10086

的帖子獲得了新回復(fù),為它的計數(shù)值增一

#ID

為12345

的帖子獲得了新回復(fù),為它的計數(shù)值增一

#ID

為99999

的帖子獲得了新回復(fù),為它的計數(shù)值增一>>>

rank.get_top(10)

#

返回今日回復(fù)

前十的帖子API作用實現(xiàn)原理ReplyDayRank(client)設(shè)置客戶端。incr_reply_count(topic_id)為給定帖子的回復(fù)計數(shù)值增一。ZINCRBYget_top(n)返回

榜中 前

N

的帖子。ZREVRANGE小象科技讓你的數(shù)據(jù)產(chǎn)生價值帖子系統(tǒng)小象科技讓你的數(shù)據(jù)產(chǎn)生價值帖子示例是根據(jù)算法來帖子R2的。算法對帖子進行評分時,考慮的因素可能有:用戶的貢獻值、發(fā)布時間、用戶的投票數(shù)、用戶的回復(fù)數(shù)量,等等。實現(xiàn)

系統(tǒng)的方法:選擇一個 算法,用于計算帖子的評分。計算各個帖子的評分,并以有序的方式展示它們。小象科技讓你的數(shù)據(jù)產(chǎn)生價值帖子

系統(tǒng)的實現(xiàn)選擇了Reddit

使用的、獲得的支持票數(shù)量以及算法(reddit_algorithm.py),這個算法進行評分時考票數(shù)量,這個算法用于計算評分的函數(shù)為:hot為了實現(xiàn)帖子系統(tǒng),慮的是帖子的(ups,

downs,

date).算法的具體解釋可以在這篇博客里面找到:com/blog/2012/03/ranking_algorithm_reddit.html包含的帖子仍然使用有序集合來 ,其中有序集合的元素為帖子的ID,而元素的分值則是算法為帖子計算出的評分。當(dāng)用戶創(chuàng)建一個帖子的時候,或者有用戶對帖子進行投票之后,

就調(diào)用

how

函數(shù)來更新帖子的評分。帖子 系統(tǒng)的相關(guān)操作抽象為

mand

類。小象科技讓你的數(shù)據(jù)產(chǎn)生價值mand

類APIAPI作用實現(xiàn)原理mand(client)設(shè)置客戶端。update_rank(topic_id,

upvote,downvote,

post_time)更新帖子的

評分。ZADD

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論