高并发下文章点击量设计
游客或者会员在点击文章的时候,需要对文章的点击量做一个计数统计。考虑到点击量计数的准确性,有以下几个需求:
一、设计思路
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、数据库表设计