新年快乐
『大伙们开工了不 ?』
过年刚回来,前两天需求还没出,摸鱼正开心呢,需求来了!
需求描述
需求是给系统内的用户发薪,需要用户添加/修改银行卡,对用户的银行卡的信息进行校验,这个校验的接口是从阿里云上找的供应商,不太能白嫖
,每次请求这个接口收费1毛,但是预算有限,所以开发过程中产品强烈邀请增加一个校验:需要对每个用户添加/修改银行卡的操作进行限制,规则是每日每人三次只能校验三次银行卡。
概要设计
需求本身也不难理解,相信xdm看到这个需求都能想到很多的解决方案,例如
- 在数据库中存储用户Id及校验次数,定时任务根据每日时间定时删除。(比较繁琐,且不优雅,不推荐)
- 使用redis缓存,以userId生成不同的key,value初始化为0,每次添加/修改银行卡后加1,超过3次进行校验提示,根据业务需要对key设置过期时间(本次需求我使用的就是这个)
需求虽然简单,技术方案也比较明确,但是我好久没用redis了,这个项目也比较老,redis相关的配置也没有,开发过程中出现了不少的低级问题,以此文记录下,并鞭策下自己。
开发中的问题
RedisTemplate相关API不熟悉
之前也用过RedisTemplate,虽然印象有点模糊,但我蜜汁自信这么简单的需求难得倒我,就没有再去看看redis相关的命令,一把梭开始(以后再也不这样了,好好反省)。
首先每次调用请求进来,要做的是根据userId生成key,初始value的值为1,放进redis缓存里
为了方便本地测试,过期时间先不设置成1天,这里我是设置成50秒。
boolean existsFlag = this.redisTemplate.opsForValue().setIfAbsent("addBank_"+qry.getUserId()+"_count",1,50, TimeUnit.SECONDS);
Integer bindedDailyCounts = (Integer