切換語言為:簡體

使用Redis設計點贊收藏功能

  • 爱糖宝
  • 2024-09-08
  • 2055
  • 0
  • 0

這周給一個小夥伴做模擬面試,因為他在公司的專案是一個短影片+電商的專案,模仿的是tiktok。看到他簡歷裡寫了做了短影片的收藏功能,於是讓他講講具體的做法是什麼樣子的。

結果回答的並不理想,答案裡有不少硬傷,今天鬆哥就來和大家簡單聊一聊這個話題。

一 為什麼用 Redis

首先就是為什麼要用 Redis?直接存到資料庫不行嗎?

用 Redis 主要是有下面一些優勢。

1.1 高效能

因為點贊收藏是一個高頻操作,所以利用 Redis 就能做到非常低的延遲和極高的吞吐量,這是一個巨大的優勢。

1.2 簡化架構

對於簡單的點贊和收藏功能,Redis 提供了內建的數據結構(如 Hash 和 Sorted Set),這使得實現起來非常簡便。你不需要編寫複雜的 SQL 查詢或設計複雜的索引來支援這些功能。

1.3 彈性和擴充套件性

Redis 支援主從複製、叢集部署以及持久化機制,這使得它非常適合需要高度可用性和可擴充套件性的應用。即使在資料量增長的情況下,你也可以透過增加 Redis 例項來水平擴充套件系統。

1.4 實時資料分析

Redis 還支援實時分析和聚合功能,這對於實時展示點贊數量或熱門內容非常有用。例如,你可以輕鬆地計算出最受歡迎的內容或使用者的活動趨勢。

因為這個小夥伴的專案是網際網路專案,所以用 Redis 去做點贊和收藏我相信大家應該沒有什麼異議。

具體問題具體分析,如果就是常規的企業級系統開發,併發量不大甚至資料量也不大的話,那麼也可以直接上資料庫。

二 使用哪種數據結構

如果用 Redis 來實現點贊或者收藏功能的話,一般來說我們有兩種數據結構可以選擇:

  • Hash

  • Sorted Set

這兩種數據結構各有特點,我們要結合具體情況來分析。

2.1 Hash

如果你的收藏功能只需要記錄使用者對某個專案是否收藏了,並不需要對這些收藏項進行排序,那麼可以考慮使用 Hash。

可以用使用者名稱做 key,value 則是一個 list,表示使用者收藏項的 id。

使用 Hash 的優點是:

  1. 空間效率高,因為 Hash 可以儲存多個欄位值對。

  2. 查詢單個使用者的收藏狀態非常快。

不過 Hash 有一個問題就是無法按收藏或者點贊時間對資料進行排序。

2.2 Sorted Set (ZSET)

如果你需要根據某個 score(例如收藏的時間戳或者其它數值指標)來給收藏的專案排序,那麼就可以考慮使用 Sorted Set。

使用 Sorted Set 的話,key 依然是使用者 id,value 則是收藏資料項的 id,score 則是收藏的時間戳。

這樣將來在查詢的時候,就可以根據時間對收藏/點贊行為進行排序。

使用 Sorted Set 的優點有:

  1. 可以輕鬆地獲取使用者的最近收藏、最熱門收藏等。

  2. 支援範圍查詢,例如獲取某個使用者收藏列表中的前 N 項。

三 小結

如果你只需要記錄收藏狀態而不需要排序,使用 Hash 是一個簡單且高效的選擇。

如果你需要排序功能(例如按照時間順序顯示收藏),則使用 Sorted Set 更合適。

根據你的具體需求選擇最適合的數據結構。如果需要更復雜的邏輯,也可以考慮結合使用這兩種數據結構。

0則評論

您的電子郵件等資訊不會被公開,以下所有項目均必填

OK! You can skip this field.