最近公司要做个文章收藏功能,说说自己的想法
问题:
- 用户可能频繁点击收藏按钮(防止连点)
- 频繁点击(收藏,不收藏)按钮
- 高并发下触发
- 列表页面显示是否收藏
设计:
- 接口前添加限流方案,推荐通过用户id限流。1秒可执行2条左右。然后客户端显示(收藏成功,收藏失败)。防止用户快速点击
- 存储记录前用redis拦截一下。判断是否收藏过具体做法
- 用redis的set结构,缓存key="cache:key:"+数据id
- 判断是否收藏过用sismember方法。sismember(key,用户id)
- 如果sismember返回的true,说明收藏过。然后去查询该记录,并删除。反之新增
- 如果设计3想再快点。就可以在查询数据库的中间添加消息队列等