likes
comments
collection
share

利用Redis计数器来实现事件粒度的监控对于一些电商场景,或者说一些推广大促的场景下,针对用户进行一些推送是现代互联网常

作者站长头像
站长
· 阅读数 55

对于一些电商场景,或者说一些推广大促的场景下,针对用户进行一些推送是现代互联网常用的营销或者促活的手段,最终在整个链路上,需要让运营人员或者说是研发人员能够看到一些数据反馈,在出现异常的时候能够进行报警,e.g.参加活动的人数暴增或者骤降进行一个监控,付费人群暴增或者骤降

使用Redis进行计数

在一个用户使用互联网产品的时候,也就是我们的APP,会请求我们的接口,判断用户的行为匹配上了哪些人群,也就是用户画像匹配上了哪些活动

在这个时候可以对每一个活动进行计数

incr命令

incr是原子的并且是并发安全的

Redis的官方文档

Increments the number stored at key by one. If the key does not exist, it is set to 0 before performing the operation. An error is returned if the key contains a value of the wrong type or contains a string that can not be represented as integer. This operation is limited to 64 bit signed integers.

将键中存储的数字加一。如果该键不存在,执行操作之前将其设置为0。如果键包含错误类型或包含无法表示为整数的字符串,则会返回错误。此操作仅限于64位有符号整数。

> SET mykey "10"
"OK"
> INCR mykey
(integer) 11
> GET mykey
"11"

计数是原子操作中最明显的,比如想知道一天之内浏览网站的用户数量,可以使用用户ID加上日期作为key,每访问一次对值进行一次incr操作

数据监控设计

对于事件/活动粒度进行监控,以事件/活动Id和日期作为Key,如果调用一次接口进行incr加一,如果Key没有值的话,首先进行Set,并且把过期时间设置为7天

在设置过期时间上我认为需要根据业务而定,如果是两天之间的数据波动的话,并且活动/事件比较多的话,过期时间可以设置小一点,如果是两周或者两个月之间的数据波动的话,过期时间可以设置久一点

在每天的晚上可以设置一个定时任务,扫描所有活跃的事件/活动,对两天的值进行一个计算,是否波动大于我们设定的阈值,如果大于的话进行一个报警,同时为了之后进行数据的排查,需要进行数据进行一个落盘,写到一个MySQL的表里面

利用Redis计数器来实现事件粒度的监控对于一些电商场景,或者说一些推广大促的场景下,针对用户进行一些推送是现代互联网常

转载自:https://juejin.cn/post/7422504149290024970
评论
请登录