最近公司要做個文章收藏功能,說說自己的想法
問題:
- 用戶可能頻繁點擊收藏按鈕(防止連點)
- 頻繁點擊(收藏,不收藏)按鈕
- 高併發下觸發
- 列表頁面顯示是否收藏
設計:
- 接口前添加限流方案,推薦通過用戶id限流。1秒可執行2條左右。然後客戶端顯示(收藏成功,收藏失敗)。防止用戶快速點擊
- 存儲記錄前用redis攔截一下。判斷是否收藏過具體做法
- 用redis的set結構,緩存key="cache:key:"+數據id
- 判斷是否收藏過用sismember方法。sismember(key,用戶id)
- 如果sismember返回的true,說明收藏過。然後去查詢該記錄,並刪除。反之新增
- 如果設計3想再快點。就可以在查詢數據庫的中間添加消息隊列等