高并发下文章点击量设计

游客或者会员在点击文章的时候,需要对文章的点击量做一个计数统计。考虑到点击量计数的准确性,有以下几个需求:

  • 用户可以不需要登录
  • 每当用户点击文章的详情页面,这个文章的点击量+1
  • 用户能实时看到文章点击量,也就是用户点击后能及时看到+1
  • 点击量最终保存在数据库中,最终一致性
  • 作者在后台编辑文章然后保存时,如果这期间有点击量的增加,保存文章时不能覆盖掉这段时间的增量
  • 需要对用户去重处理,也就是一个人在一定时间内多次点击只计数一次,防止用户不断刷新或者使用爬虫不断请求某个API
  • 要过滤掉百度和谷歌的爬虫请求(根据User-Agent头判断,可以先不做)

一、设计思路

1、因为用户的数量可能很多,所以要求做到高并发,直接在数据库做加1操作不行,考虑利用缓存计数;

2、要求最终数据库数据一致性,考虑利用定时任务从缓存中获取;

3、用户可以匿名,所以缓存的key设计可以用文章标题的hash+用户ip;

4、防止爬虫或者快速刷接口,需要在后端对同一个用户的同一篇文章在缓存中打标;

5、保存文章更新的时候,不能更新点击量,点击量通过定时任务从缓存中获取,防止数据被覆盖;

5、考虑到缓存的使用效率,需要对缓存的key做过期设置,或者主动清除旧的key。

二、设计实现

1、文章详情获取请求路径:Get  /article/{title}

      在请求详情的时候,同时请求点击量+1的接口 Put   /article/{title} , 然后后端同步返回200

2、缓存的key设计,文章点击量key-> article:title:num  缓存的时间可以设置为1周;对用户文章点击量去重,设计key: article:title:ip, 缓存的有效时间1分钟,也就是1分种内同一个ip,同一片文章多次点击只计数一次。

3、数据库表设计

idtitleclick_numcreate_timeupdate_time
     

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值