




下載本文檔
版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 建房拆除改造合同范本
- 制砂機購買合同范例
- 中俄出口合同范例
- 高壓電工(運行)復(fù)習(xí)題(含參考答案)
- 農(nóng)用機車租賃合同范本
- 醫(yī)院布草采購合同范本
- 出租房管理電子合同范本
- 養(yǎng)生店加盟合同范本
- ASP測試題與參考答案
- 一年級上學(xué)期班主任工作總結(jié)
- 2025年《地陪導(dǎo)游服務(wù)程序》公開課標(biāo)準(zhǔn)教案
- 生物醫(yī)藥研發(fā)實驗室的安全風(fēng)險評估與控制
- 合肥科技職業(yè)學(xué)院單招計算機類考試復(fù)習(xí)題庫(含答案)
- 2018-2022年北京市中考真題數(shù)學(xué)試題匯編:填空壓軸(第16題)
- 初三物理常識試卷單選題100道及答案
- 2025年吉林省吉林市事業(yè)單位招聘入伍高校畢業(yè)生54人歷年高頻重點提升(共500題)附帶答案詳解
- 《智能制造技術(shù)基礎(chǔ)》課件-第6章 智能制造裝備
- 鋼結(jié)構(gòu)地下停車場方案
- 《上市公司治理培訓(xùn)》課件
- 新人教版小學(xué)五年級數(shù)學(xué)下冊《第一單元 觀察物體(三)》2022課標(biāo)大單元整體教學(xué)設(shè)計-全析
- 《光伏電站運行與維護》課件-項目五 光伏電站常見故障處理
評論
0/150
提交評論