文章、博客、商品的点击量功能的高负载实现

文章、博客、商品等功能经常需要一个字段统计用户的点击量(访问量),该字段通常需要持久化到数据库中,但数据库是不适合直接应对用户操作,这种场量如何实现高负载?

主流的系统高负载解决方案,通常把数据同步到分布式的ES,多节点的 Redis 集群中。但点击量这个字段,需要在页面中实时展示,用户刷新页面时,需要直观的看到点击量的变化。

我们首先能想到的,是将点击量直接存入Redis,展示页面时从Redis实时读取,并实时累加,

键名格式:article : [id] : hits

键值格式:点击量

这样设计仅为满足点击量功能问题不大,俚进一步的需求来了:热门文章,热门商品等功能,需要跟据点击量进行排序,或者聚合更多字段进行查询。因此,点击量还是是需要更新到数据库和ES中的。但又不能实时更新,因此可以在 redis 存储点击量时,增加一个计数器,当计数器未到达临界值时,仅累加Redis,不写入数据库,当计数器到达临界值时,写入数据库,计数器归0

键名格式:article : [id] : hits(示例值:article:10:hits)

键值格式:点击量,计数器(示例值:123,10,表示当前点击量为123,计数器为10)

下次访问后,示例值变为:124,11,表示当前点击量为124,11,计数器为11。

当计数器值到达 1000 时(示例值为:1113,1000),计数据归 0 (1113,0),将 1113 更新到数据库并触发ES更新

流程图如下:

另外,还可以进一步简化设计,不设置计数器,用点击量取模临界值(点击量 % 临界值 === 0),余数为0时更新数据库。

本文原始网址:文章、博客、商品的点击量功能的高负载实现,转载请保留出处

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值