技术派Redis实现计数统计
选中新版正文中的对应文字,然后点“定位到这里”。
计数器大量应用于互联网上的大大小小项目,你可以在各种应用场景中找到计数器的影子,单以技术派项目为例,也有相当多的地方会有计数相关的诉求,比如
- 文章点赞数
- 收藏数
- 评论数
- 用户粉丝数
- ...
看过技术派源码的小伙伴,可以发现我们提供了两种查询计数相关的方案,一个是基于db中的操作记录进行实时更新;还有一种则是基于redis的incr特性来实现计数器
接下来,我们重点看下redis的incr是怎么用于技术派计数场景的。
计数的业务场景
首先我们看一下技术派中使用到计数器的场景,主要有两大类(业务计数+pv/uv),三个细分领域(用户、文章、站点)
- 用户的相关统计信息
- 文章数,文章总阅读数,粉丝数,关注作者数,文章被收藏数、被点赞数量

- 文章的相关统计信息
- 文章点赞数,阅读数,收藏数,评论数

- 站点的pv/uv等统计信息
- 网站的总pv/uv,某一天的pv/uv
- 某个uri的pv/uv

文章的计数场景主要用来给大家介绍redis计数器的使用姿势
用户与文章的相关统计是这篇内容的重点,因为这两个的业务很相似,我们就选择一个重点,以用户统计来进行介绍;
而pv/uv的实现请关注:
此处为语雀内容卡片,点击链接查看:✅技术派数据统计PV/UV
redis计数器
redis计数器,主要是借助原生的incr指令来实现原子的+1/-1,更棒的是,不仅redis的string支持incr,hash、zset 数据类型同样也支持incr
1. incr指令
Redis Incr 命令用于将 key 中存储的数值增一。
- 如果 key 不存在,那么 key 的值会先被初始化为 0 ,然后再执行 INCR 操作。
- 如果值包含错误的类型,或字符串类型的值不能表示为数字,那么返回一个错误。
- 本操作的值限制在 64 位(bit)有符号数字表示之内。
接下来看下技术派的封装实现
/**
* 自增
*
* @param key
* @param filed
* @param cnt
* @return
*/
public static Long hIncr(String key, String filed, Integer cnt) {
return template.execute((RedisCallback) con -> con.hIncrBy(keyBytes(key), valBytes(filed), cnt));
}
2. 用户计数统计
每个用户对应一个hash
- key:
user_statistic_${userId} - field:
- followCount: 关注数
- fansCount: 粉丝数
- articleCount: 已发布文章数
- praiseCount: 文章点赞...
未能定位到原文的划线
已加入星球,可直接知识星球授权登录
二哥编程星球目前包含:
企业级Agent工作流编排项目PaiFlow
Vibe Coding版本的PaiAgent
派聪明RAG AI知识库Java版本+Go版本
微服务 PmHub、技术派、MYDB
求职派JobClaw(OpenClaw/Hermes架构
PaiCLI(类似Claude Code的Agent
派简历(代码已完成)
等实战项目。
企业级Agent工作流编排项目PaiFlow
Vibe Coding版本的PaiAgent
派聪明RAG AI知识库Java版本+Go版本
微服务 PmHub、技术派、MYDB
求职派JobClaw(OpenClaw/Hermes架构
PaiCLI(类似Claude Code的Agent
派简历(代码已完成)
等实战项目。
1. 微信扫右侧的优惠券加入知识星球
2. 解锁星球的实战项目教程和源码: 项目源码+教程获取
真诚点赞 诚不我欺
回复