Redis实现计数统计

介绍

计数器大量应用于互联网上大大小小的项目,你可以在很多场景都能找到计数器的应用范畴,单纯以技术派项目为例,也有相当多的地方会有计数相关的诉求,比如

文章带赞数

收藏数

评论数

用户粉丝数

......

技术派中有两种查询计数相关的方案,一个是基于db中的操作记录进行实施,一种是基于redis的incr特性来实现计数器

下面来看一下,redis的计数器是怎样用于技术派的技术场景的

计数的业务场景

首先我们看一下技术派中使用到的计数器的场景,主要有两大类(业务计数+pv/uv),三个细分领域(用户、文章、站点)

用户的相关统计信息

        文章数,文章总阅读数,粉丝数,关注作者数,文章被收藏数、被点赞数量

    站点的pv/uv等统计信息

        网站的总pv/uv,某一天的pv/uv

        某个uri的pv/uv

注意上面的几个场景,这里主要介绍redis计数器的使用

那用户与文章的相关统计将是我们的重点,因为这两个的业务属性很相似,因此我们选择一个重点,以用户统计来实现。

redis计数器

redis计数器,主要是借助原生的incr指令来实现原子的+1-1操作,更棒的是不仅redis的string数据结构支持incr,hash、zset数据结构同样也是支持incr的

1.incr指令

Redis incr命令将key中存储的数字值增值一。

        如果key不存在,那么key的值会先被初始化为0,然后在执行INCR操作。

        如果值包含错误类型,或者字符串类型的值不能表示为数字,那么返回一个错误。

        本操作的值限制在64位有符号数字表示之内。

接下来看项目封装实现

    /**
     * 自增
     *
     * @param key
     * @param filed
     * @param cnt
     * @return
     */
    public static Long hIncr(String key, String filed, Integer cnt) {
        return template.execute((RedisCallback<Long>) con -> con.hIncrBy(keyBytes(key), valBytes(filed), cnt));
    }

2.用户计数统计

我们将用户的相关计数,每个用户对应一个hash数据结构

        key: user_statistic_${userId}

        filed: 

                follCount: 关注数

                fansCount: 粉丝数

                articleCount: 已发布文章数

                praiseCoun

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值