Redis系列學習筆記15 論壇構建

來源:互聯網
上載者:User
論壇構建

介紹如何使用 Redis 去構建一個論壇 主要功能 使用者帳號 建立文章、回複文章、為文章投票 為文章分類,查看屬於特定分類的文章 將多個分類(category)歸類至某個標籤(tab),查看屬於特定標籤的文章 每日熱議文章熱門排行榜 基於演算法的文章推薦 一個文章的構成部分: 分類 標題 使用者的投票數量 作者 發布時間 點擊量 內容 TAG 根據分類展示文章

分類頁面會根據文章最後一次被回複的時間來排序文章。 Category 類

API 作用 實現原理
Category(client, name) 設定用戶端以及分類的名字。
include_topic(topic_id) 將給定的文章添加到當前分類中。 ZADD
is_included(topic_id) 檢查給定的文章是否屬於當前分類。 使用 ZSCORE 檢查有序集合中,topic_id 對應的分值是否存在,如果不存在,那麼文章不屬於該分類。
count_topic() 返回當前分類包含的貼文量。 ZCARD
paging(n, count) 按 count 個文章為一頁,返回該分類第 n 頁的文章。 ZREVRANGE
根據標籤展示文章

一個標籤可以包含多個分類,而屬於被包含分類的文章會出現在標籤的列表裡面。 實現標籤功能需要兩個步驟: 記錄標籤和分類之間的關係。

舉個例子,程式要記住,”程式員”、”Linux”、”node.js”這些分類都屬於”技術”標籤。 記錄標籤屬下的文章,當使用者點擊某個標籤時,展示該標籤屬下的各個文章。

舉個例子,文章 132312 屬於”程式員”分類,而該分類又屬於”技術”標籤,所以程式應該在使用者點擊”技術”頁面時,展示出文章 132312 。 Tag 類

API 作用 實現原理
Tag(client, tag_name) 設定用戶端和標籤的名字。
add_member(category_name) 將給定的分類添加到當前標籤裡面。 SADD
is_member(category_name) 檢查給定的分類是否屬於當前標籤。 SISMEMBER
get_all_member() 返回當前標籤包含的所有分類。 SMEMBERS
count_member() 返回標籤包含的分類數量。 SCARD
include_topic(category_name, topic_id) 將給定分類的文章添加到當前標籤的貼文清單裡面。 ZADD
paging(n, count) 返回標籤包含的文章。 ZREVRANGE
count_topic() 返回標籤目前包含的貼文量。 ZCARD
回複文章

使用者可以對文章進行回複。每條回複會至少會包含作者、回複時間和回複內容這些資訊。並且每個文章都需要一個列表來儲存所有回複。這和我們之前為了實現微博評論而建立的 Comment 類和 CommentList 類的需求基本相同,所以只要對這兩個類進行一些簡單的修改,就可以重用它們了。 每日熱議文章排行

每日熱議文章熱門排行榜展示了每天回複數量最多的文章, 這個熱門排行榜每天更新一次。

為了實現這個熱門排行榜,程式需要使用一個鍵名為 bbs::reply_day_rank 的有序集合,其中有序集合的元素為文章的 ID ,而元素的分值則是文章在當前被回複的數量。

每當 ID 為 N 的文章新增一條回複時,程式就執行以下命令來增加文章在熱門排行榜中的回複數量:

ZINCRBY bbs::reply_day_rank N 1

並且程式會為 bbs:reply_day_rank 設定存留時間,讓它在一天之後自動到期,並自動建立新榜單。

這可以通過修改並重用之前介紹過的 DayRank 類來實現。 ReplyDayRank 類

API 作用 實現原理
ReplyDayRank(client) 設定用戶端。
incr_reply_count(topic_id) 為給定文章的回複計數值增一。 ZINCRBY
get_top(n) 返回熱門排行榜中排名前 N 的文章。 ZREVRANGE
文章推薦系統

演算法對文章進行評分時,考慮的因素可能有:使用者的貢獻值、發布時間、使用者的投票數、使用者的回複數量,等等。

實現推薦系統的方法: 選擇一個推薦演算法,用於計算文章的評分。 計算各個文章的評分,並以有序的方式展示它們。

TopicRecommand 類

API 作用 實現原理
TopicRecommand(client) 設定用戶端。
update_rank(topic_id, upvote,downvote, post_time) 更新文章的推薦評分。 ZADD
paging(n, count) 返回演算法推薦的第 n 頁的文章。 ZREVRANGE

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.