使用redis incr处理并发问题
一、背景
最近公司某个短信接口因为没有加验证码限制被恶意调用,最好的解决办法是做在发送短信请求前做一个验证码验证通过后再调用短信接口。但是由于需要立马改动,借此使用了一下 “缓兵之计”--redis计数器限制
二、使用redis计数器引入黑名单机制
incr是redis中一个递增函数手册是这样介绍的
Redis Incr 命令将 key 中储存的数字值增一。如果 key 不存在,那么 key 的值会先被初始化为 0 ,然后再执行 INCR 操作。如果值包含错误的类型,或字符串类型的值不能表示为数字,那么返回一个错误。本操作的值限制在 64 位(bit)有符号数字表示之内。
那么可以通过这个函数,将一分钟内请求短信次数超过3次的手机号拉黑(具体短信请求几次根据具体业务场景确定,我们公司这个业务一分钟内请求2次短信就可以的)
补分代码如下,使用expire设置key的生命周期。在expire(多长时间内)这个key被用一次就incr一次。具体上限自己确定
注意:自增函数 ,key为自己定义字符串+手机号(方便删除)
<textarea readonly="readonly" name="code" class="Java"> public Long incr(String key) {Jedis jedis = Redis.Operate.getJedis();try {return jedis.incr(key);} finally {if (null != jedis) {jedis.close();}}}
//使用expire设定key的生命周期,(即在多长时间内计数达到上限)
public void expire(String key, int seconds) {Jedis jedis = Redis.Operate.getJedis();try {jedis.expire(key, seconds);} finally {jedis.close();}}
//最后写判断 count 数和最后自增数比较。超了就。。。。你懂得。大体如下
long count = incr(key);
if (count == 1) {
expire(key,60);
}
if (count > 1) {
//GG,你懂得
return;
}
使用redis incr处理并发问题相关推荐
- java操作redis并发_使用Redis incr解决并发问题的操作
项目背景: 1.新增问题件工单,工单中有工单编码字段,工单编码字段的规则为 "WT"+yyyyMMdd+0000001. 2.每天的工单生成量是30W,所以会存在并发问题 解决思路 ...
- 使用redis incr处理并发,存在死锁问题
目录 1.项目场景: 2.问题代码 : 3.修改后的代码: 4.实战示例: 5.更新:setIfAbsent 6.再次更新:redisson 1.项目场景: 锁主要是用来实现资源共享同步,只有获取到了 ...
- Redis incr解决并发问题
项目背景: 1.新增问题件工单,工单中有工单编码字段,工单编码字段的规则为 "WT"+yyyyMMdd+0000001. 2.每天的工单生成量是30W,所以会存在并发问题 解决思路 ...
- redis 的incr 高并发 原子性计数器
前言:6月底 公司录单的人比较多,由于先前的系统用的同步锁 ,我们是多服务实例,导致出现重复单号的问题,我想到的解决办法有两种 ,第一种是 Redis锁 第二种是自增key,下面实现的是用第二种方法 ...
- php redis incr过期时间,Redis 利用 incr 和 expire 来限流, 并发导致过期时间失效问题...
当某一个接口需要限流时,可以采用redis的incr来递增,记录访问次数, 以及 expire 来设置失效时间. 大概的代码如下: r = redis.Redis.connect() key = &q ...
- Redis适用于高并发的递增、递减功能
递增指令:incr(默认从0开始) 递减指令:decr(默认从0开始,递减会出现负数,这点跟memcache不一样,mc到0) 如下: 附上shardedJedisPool和JedisCluster的 ...
- 29 | 无锁的原子操作:Redis如何应对并发访问?
文章目录 Redis核心技术与实战 实践篇 29 | 无锁的原子操作:Redis如何应对并发访问? 并发访问中需要对什么进行控制? Redis 的两种原子操作方法 Redis核心技术与实战 实践篇 2 ...
- redis incr和incrBy的使用
最近用incr和incrBy在接口里做了下埋点统计每天请求总数,这两个命令还是挺好用的,先说下这俩命令吧 注:redis后台服务是串行的单线程执行,不存在并发,即多线程调用Incr/incrby方法 ...
- Redis如何应对并发访问
Redis如何应对并发访问 Redis如果在业务中运用那么肯定需要考虑并发问题,如多个用户对同一个商品进行扣减,这时并发执行很可能导致商品数量不对,那么Redis如何来避免这些问题呢?一般分为两种解决 ...
最新文章
- vss6 forgot admin password
- linux随机数示例:随机产生以139开头的电话号码
- 前端学习(2611):vuex实现增加
- 音频重采样有什么用_最佳音频接口基本购买指南
- flask get 参数_Python web 用它5分钟以后,我放弃用了四年的 Flask
- 将Entity Framework Core v5.0移至单独的项目
- python36安装opencv3.2_Python3.5.3下配置opencv3.2.0的操作方法
- java 接口开发时间_Java开发中的日期和时间使用
- AlphaZero问世:8小时完爆围棋、国际象棋、日本将棋(转)
- 中兴新支点操作系统_QQ Linux版重磅回归,完美适配中兴新支点操作系统,快来使用吧...
- 传奇客户端DATA文件详细说明
- 青年与计算机比赛,我市首届青少年电脑机器人竞赛精彩上演
- 雅虎财经 api_雅虎音乐API
- 【百度编辑器】修改上传图片缩略图大小
- bindingResult
- 文本相似度:Distributed Representations of Sentences and Documents
- stm32 不断进入串口中断的bug解决方法
- GV2、GV3、GV4热磁和单磁断路器区别是什么?
- 2018首届传神者大会:“语言+新技术”将推动语言产业生态化发展 2018首届传神者大会圆满落幕,“语言+新技术”或开启全球深度互联时代 智联未来,跨界赋能 1211首届传神者大会圆满落幕...
- 让超级高铁黯然失色,概念机Antipode一小时内可达全球各地
热门文章
- 机器学习并没有那么深奥,它很有趣(2)
- CAD2018安装计算机黑屏,3dmax2018一打开就闪退的三种原因和解决方法
- Linux常用基本命令详解(二)-------磁盘分区和磁盘管理类命令
- JavaWeb 第一章 HTMLCSS
- 进程与程序的联系与区别
- 智能电话机器人(各个版本机器人部署)
- oracle grant all语句,Oracle 生成批量 Grant 语句的 SQL
- 英雄会归来,做个人物小点评。
- 计算机系统结构 之 指令系统
- Python中通过索引名称提取数据loc()函数Python中通过行和列下标提取数据iloc()函数