主要功能 用户账号 创建帖子、回复帖子、 为帖子投票 为帖子分类,查看属于特定分类的帖子 将多个分类(category)归类至某个标签(tab),查看属于特定标签的帖子 每日热议帖子排行榜 基于算法的帖子推荐  创建用户账号 注册 V2EX 账号要求输入用 户名、密码和电子邮件地址,并且用户名和电子邮件地址必须是未被使用的,这和微博的账号注册要求一样。 因此,我们可以重用之前的UniqueSet类来保证用户名和电子邮件地址的唯一性,并重用之前的User类来创建论坛账号 创建帖子 一个帖子的构成部分: 分类 标题 用户的投票数量 作者 发布事件 点击量 内容 TAG 创建帖子 程序会为用户创建的每个帖子分配一个唯一的帖子 ID ,然后将帖子 ID 、发布时间、点击量、标题、作 者的 ID、内容、分类、TAG 等信息储存到格式为 bbs::topic::<id> 的散列键里面 HMSET bbs::topic::131853 id 131853 time 1410165226 click_counter 0 title “WordPress 4.0 \“Benny\” 正式版发布......” author_id 48771 content “WordPress 4.0 简体中文版现已开放下载,......” category “WordPress” tags JSON([“WordPress”, “简体”, “benny”]) 查看帖子 V2EX 使用了两种方式来展示帖子,一种是按照分 类(category)来展示,另一种是按 标签(tag)来展示 接下来我们将逐一实现这两种展示帖子的方式 储存分类帖子 为了储存同一分类的帖子,并按照帖子最后一次被回复的 时间有序地排列帖子,程序会 为每个分类创 建一个键名为 bbs::category::<name> 的有序集合,其中有序集合的元素 为帖子的 ID ,而元素的分值 则是帖子最后一次被回复的 UNIX 时间戳。 例子,将最后一次回复 时间为 1410165226 ,ID 为 131853 的帖子归到 WordPress 分类里面: ZADD bbs::category::WordPress 1410165226 131853 因为同一分类的帖子会被有序地 储存起来,所以程序只要 对有序集合调用 ZREVRANGE 命令,就可以 按照回复 时间从新到旧的 顺序,取出属于同一分 类的多个帖子。 我们可以将这些针对分类的操作抽象为 Category 类。  Category 类 API Category 类使用示例 >>> wordpress_category = Category(client, “WordPress”) >>> wordpress_category.include_topic(131853) >>> wordpress_category.is_included(131853) True >>> wordpress_category.count_topic() 148 TAB类 API
Tab 类使用示例 >>> tech_tab = Tab(client, “技术”) >>> tech_tab.add_member(“程序员”) >>> tech_tab.add_member(“node.js”) >>> tech_tab.add_member(“Linux”) >>> tech_tab.is_member(“程序员”) >>> tech_tab.include_topic(“程序员”, 132312)
ReplyDayRank类API >>> rank = ReplyDayRank(client) >>> rank.incr_reply_count(10086) # ID 为 10086 的帖子获得了新回复,为它的计数值增一 >>> rank.incr_reply_count(12345) # ID 为 12345 的帖子获得了新回复,为它的计数值增一 >>> rank.incr_reply_count(99999) # ID 为 99999 的帖子获得了新回复,为它的计数值增一 >>> rank.get_top(10) # 返回今日回复排名前十的帖子 帖子推荐系统的实现 为了实现帖子系统,我们选择了 Reddit 使用的推荐算法( reddit_algorithm.py),这个算法进行评分时考 虑的是帖子的发布时间、获得的支持票数量以及反 对票数量,这个算法用于计算评分的函数为:hot (ups, downs, date) 算法的具体解释可以在这篇博客里面找到: http://www.ruanyifeng. com/blog/2012/03/ranking_algorithm_reddit.html 推荐标签包含的帖子仍然使用有序集合来 储存,其中有序集合的元素 为帖子的 ID ,而元素的分值则是 算法为帖子计算出的评分。 当用户创建一个帖子的时候,或者有用户对帖子进行投票之后,我们就调用 how 函数来更新帖子的评 分。 我们将帖子推荐系统的相关操作抽象为 TopicRecommand 类 TopicRecommand 类 API >>> recommand = TopicRecommand(client) >>> recommand.update_rank(10086,10,3,1410173496) >>> recommand.paging(1,10)
各项功能以及他们的实现方式