背景
积分相当于用户的资产,往往需要当作金钱对待
设计
要求
- 需要及时发现用户的薅羊毛行为
- 对于异常用户需要有黑名单机制
- 接口调用需要有相应的鉴权措施
实现
如何及时发现用户的薅羊毛行为
通过日志对用户积分使用频率、额度进行统计监控
如何预防
对每日额度进行限制,要求必须高性能
版本一:通过lua脚本实现,计算用户的每日额度,维护性较差,性能较高
版本二:直接通过多条redis命令实现
黑名单如何实现
如何拉黑用户
- 提供拉黑接口
- 拉黑时将用户昵称信息全部插入黑名单表
- 同时加载到缓存
如何判断拉黑
封装对应的方法级注解,拦截业务参数,在缓存中进行判断。
扩展
动态代理
目的:在不修改原始类代码的前提下,通过代理对象控制对目标对象的访问。
- 定义接口和实现类
- 实现invocationHandler
- 生成代理对象并调用方法
|
|
有接口优先使用JDK自带,性能较好,依赖反射实现。
没有接口再使用cglib,通过ASM库生成目标类的子类,覆盖父类方法。
总结
可以进一步优化实现实时风控,通过flink+kafka实现实时的用户检测。