Redis实现高并发计数器
发表于:2025-02-02 作者:千家信息网编辑
千家信息网最后更新 2025年02月02日,业务需求中经常有需要用到计数器的场景:譬如一个手机号一天限制发送5条短信、一个接口一分钟限制多少请求、一个接口一天限制调用多少次等等。使用Redis的Incr自增命令可以轻松实现以上需求。以一个接口一
千家信息网最后更新 2025年02月02日Redis实现高并发计数器
业务需求中经常有需要用到计数器的场景:譬如一个手机号一天限制发送5条短信、一个接口一分钟限制多少请求、一个接口一天限制调用多少次等等。使用Redis的Incr自增命令可以轻松实现以上需求。以一个接口一天限制调用次数为例:
/** * 是否拒绝服务 * @return */ private boolean denialOfService(String userId){ long count=JedisUtil.setIncr(DateUtil.getDate()+"&"+userId+"&"+"queryCarViolation", 86400); if(count<=10){ return false; } return true; }
/** * 查询违章 * @param plateNumber车牌 * @param vin 车架号 * @param engineNo发动机 * @param request * @param response * @throws Exception */ @RequestMapping("/queryCarViolationList.json") @AuthorizationApi public void queryCarViolationList(@CurrentToken Token token,String plateNumber,String vin, String engineNo,HttpServletRequest request,HttpServletResponse response) throws Exception { String userId=token.getUserId(); //超过限制,拦截请求 if(denialOfService(userId)){ apiData(request, response, ReqJson.error(CarError.ONLY_5_TIMES_A_DAY_CAN_BE_FOUND)); return; } //没超过限制,业务逻辑…… }
每次调用接口之前,先获得下计数器自增后的值,如果小于限制,放行,执行后面的代码。如果大于限制,则拦截掉。
JedisUtil工具类:
public class JedisUtil { protected final static Logger logger = Logger.getLogger(JedisUtil.class); private static JedisPool jedisPool; @Autowired(required = true) public void setJedisPool(JedisPool jedisPool) { JedisUtil.jedisPool = jedisPool; } /** * 对某个键的值自增 * @author liboyi * @param key 键 * @param cacheSeconds 超时时间,0为不超时 * @return */ public static long setIncr(String key, int cacheSeconds) { long result = 0; Jedis jedis = null; try { jedis = jedisPool.getResource(); result =jedis.incr(key); if (cacheSeconds != 0) { jedis.expire(key, cacheSeconds); } logger.debug("set "+ key + " = " + result); } catch (Exception e) { logger.warn("set "+ key + " = " + result); } finally { jedisPool.returnResource(jedis); } return result; }}
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
限制
接口
计数器
业务
需求
代码
内容
发动机
命令
场景
就是
工具
手机
手机号
时间
次数
短信
车架
车牌
逻辑
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
阿里云的服务器能用腾讯的证书吗
如何给服务器发布指令
链接网络安全密钥是指什么
海天小说软件开发
针对国家网络安全
手动电脑软件开发
健身环连接服务器时出错
中建网络安全
普法考试网络安全法禁止
ios 的数据库是什么
sql删除数据库中所有表
望京互联网科技有限公司
浙江运营网络技术服务费
东莞海鲜冷库软件开发
北京智能照明软件开发怎么样
天涯明月刀剑怎么切换服务器
移动端应用服务器
类似服务器的游戏软件
如何保持wifi网络安全
安卓数据库文件存在哪里
寒假护苗网络安全课三
腾讯网络安全日是几号
淄博软件开发方案
dbc是数据库吗
wow怀旧服开了新服务器
第二实验小学网络安全宣传
超威服务器跟amd服务器
浪潮服务器连存储就起不来
国家网络安全通报中心发文
衡东县网络安全大队