腾讯云知识

Redis实战之限制操作频率

场景 场景1场景2场景3 抽离本质 在业务开发的过程中,我们不断的参与各种业务场景的方案设计,往往很容易碰到很类似的场景,只不过当前所属的业务模块不一样,其实这些需求的本质是解决同一个问题,当我们遇到这种场景的时候,我们需要根据自己经验分析抽离

场景

场景1场景2场景3抽离本质

在业务开发的过程中,我们不断的参与各种业务场景的方案设计,往往很容易碰到很类似的场景,只不过当前所属的业务模块不一样,其实这些需求的本质是解决同一个问题,当我们遇到这种场景的时候,我们需要根据自己经验分析抽离出需求的本质问题,实现一个通用的解决方案,这可能就是区别于你是有灵魂的工程师还是cp(copy paste)最强王者吧。

勾画功能逻辑流程图,方便理解:

通过分析上面的需求场景,其实他们有很多相似的地方,我们可以把需求场景抽离成:

时间范围X秒内限制操作数Y次超出封印时间Z(秒/具体时间)超出不让再操作,并提示

(最小时间单位用秒:天/小时/分钟都可换算成秒,用秒可以解决更多的场景)

如果把功能抽离成一个通用函数是不是大概是这样:

解决方案落地

功能需要进行用户时间内,操作动作,操作次数存储,失效过期的清理,这里主角:redis 终于登场了,基于redis特性,incr的原子操作和key 支持过期机制,内存存储的效率优势,可以相对简单灵活并且又高效的完成目的。

通用功能的代码实现:

编码上可以根据你设计这个通用方案的复杂度进行进一步抽象,如抽象成频率限制的功能类 等

总结对相似的业务场景进行分析,发现本质问题并设计通用的解决方案基于redis特性,相对简单的实现通用的频率限制功能

上一篇:2019 PHP 安全指南 下一篇:6年时间我学会怎么使用腾讯云,并赚钱

精彩导读