微博功能分析
UniqueSet 類
| API |
作用 |
實現原理 |
| UniqueSet(client, key) |
設定唯一集合的用戶端和鍵。 |
|
| is_include(element) |
檢查元素是否存在於唯一集合。 |
SISMEMBER |
| add(element) |
將元素添加到唯一集合。 |
SADD |
user 類
| API |
作用 |
實現原理 |
| User(client) |
設定執行操作時要使用的用戶端。 |
|
| create(name, email, password) |
根據給定的名字、郵箱和密碼,建立一個新的使用者,返回使用者的 ID 。 |
使用 HMSET 儲存使用者資訊,使用 HSET 在 email 和ID 之間進行關聯。 |
| try_login(email, password) |
嘗試使用給定的郵箱和密碼進行登入,如果成功的話,返回該帳號的ID、使用者名稱等資訊。根據 email 尋找與之關聯的使用者識別碼 ,然後根據 ID 取出使用者資料,進行密碼對比。 |
|
使用者關係
關注與被關注 RelationShip 類
| API |
作用 |
實現原理 |
| RelationShip(client) |
設定關係類使用的用戶端。 |
|
| follow(fans, target) |
讓 fans 關注 target 。 |
將 fans 添加到 target 的粉絲集合裡面,將 target 添加到 fans 的關注集合裡面。 |
| is_following(a, b) |
檢查 a 是否正在關注 b 。 |
檢查 a 的關注集合是否包含 b 。 |
| is_following_each_other(a, b) |
檢查 a 和 b 是否關注了彼此。 |
檢查 a 的關注集合是否包含 b ,以及 b 的關注集合是否包含 a 。 |
| get_all_following(user) |
返回使用者關注的所有人。 |
返回使用者的整個關注集合。 |
| get_all_fans(user) |
返回使用者的所有粉絲。 |
返回使用者的整個粉絲集合。 |
| common_following(a, b) |
返回 a 和 b 共同關注的人。 |
計算 a 和 b 的關注集合的並集。 |
發微博
儲存微博並將它廣播至各個時間軸 Message 類的實現
| API |
作用 |
實現原理 |
| Message(client) |
設定用戶端。 |
|
| create(author, content) |
儲存一條微博,並返回該微博的 ID 。 |
使用 HMSET 將微博的相關資訊儲存到一個散列裡面。 |
| get_by_id(message_id) |
根據 ID 尋找微博。 |
使用 HGETALL 擷取儲存在散列裡面的微博資訊。 |
時間軸
按照發表時間的先後順序來儲存微博
程式會為每個使用者儲存兩條時間軸: 定製時間軸,包含了使用者自己以及使用者正在關注的人發送的微博,鍵名為 weibo::user::id::custom_timeline 。 個人時間軸,只包含使用者自己發送的微博,鍵名為weibo::user::id::personal_timeline 。 Timeline 類
| API |
作用 |
實現原理 |
| Timeline(client) |
設定用戶端。 |
|
| custom_push(user_id, msg_id, time) |
將微博推入到使用者的定製時間軸裡面。 |
使用 ZADD 將微博 ID 添加到代表定製時間軸的有序集合裡面。 |
| personal_push(user_id, msg_id,time) |
將微博推入到使用者的個人時間軸裡面。 |
使用 ZADD 將微博 ID 添加到代表個人時間軸的有序集合裡面。 |
| broadcast(msg_id, time, *fans_ids) |
將微博推入到所有給定使用者的定製時間軸裡面。 |
遍曆傳入的所有使用者識別碼 ,對每個ID 都執行一次 custom_push 。 |
| custom_paging(user_id, n, count) |
按每頁 count 條微博計算,擷取使用者定製時間軸第 n 頁的微博。 |
使用 ZREVRANGE 以從新到舊的順序取出有序集合儲存的微博 ID 。 |
| personal_paging(user_id, n, count) |
擷取使用者個人時間軸第 n 頁的微博,按每頁 count 條微博計算。 |
使用 ZREVRANGE 以從新到舊的順序取出有序集合儲存的微博 ID 。 |
為微博點贊
支援自己喜歡的微博 LikeMessage 類的實現
| API |
作用 |
實現原理 |
| LikeMessage(client, msg_id) |
設定用戶端和要進行操作的微博。 |
|
| like(user_id) |
使用者對微博點贊。 |
將使用者識別碼 添加到集合裡面。 |
| is_liking(user_id) |
檢查使用者是否贊了該微博。 |
使用 SISMEMBER 檢查使用者識別碼是否存在於集合。 |
| undo(user_id) |
取消使用者的點贊。 |
使用 SREM 將使用者識別碼 從集合中移除。 |
| count() |
擷取該微博的點贊人數。 |
對集合執行 SCARD 。 |
| get_all_liking_user() |
返回所有贊了該微博的使用者。 |
對集合執行 SMEMBERS 。 |
評論微博
對微博內容進行討論 Comment 類
| API |
作用 |
實現原理 |
| Comment(client) |
設定用戶端。 |
|
| create(author, content) |
建立評論。 |
使用 HMSET 將評論儲存到散列裡面。 |
| get_by_id(comment_id) |
擷取指定的評論。 |
使用 HGETALL 擷取散列儲存的評論資訊。 |
CommentList 類
| API |
作用 |
實現原理 |
| CommentList(client, message_id) |
設定用戶端以及被評論的微博。 |
|
| push(comment_id) |
為微博添加評論。 |
使用 LPUSH 命令將評論ID推入到列表裡面。 |
| count() |
擷取微博目前的評論數量。 |
LLEN |
| paging(number, count) |
按每頁 count 條評論計算,擷取該微博第 number 頁上的評論。 |
LRANGE |
轉寄微博
在一條微博裡面引用另一條微博
修改之前發微博的介面,改為:create(author, content, origin_message_id=None)