- 作者:老汪软件技巧
- 发表时间:2024-10-10 10:04
- 浏览量:
对于一些电商场景,或者说一些推广大促的场景下,针对用户进行一些推送是现代互联网常用的营销或者促活的手段,最终在整个链路上,需要让运营人员或者说是研发人员能够看到一些数据反馈,在出现异常的时候能够进行报警,e.g.参加活动的人数暴增或者骤降进行一个监控,付费人群暴增或者骤降
使用Redis进行计数
在一个用户使用互联网产品的时候,也就是我们的APP,会请求我们的接口,判断用户的行为匹配上了哪些人群,也就是用户画像匹配上了哪些活动
在这个时候可以对每一个活动进行计数
incr命令
incr是原子的并且是并发安全的
Redis的官方文档
Increments the number stored atkeyby one. If the key does not exist, it is set to0before 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的表里面