java中如何实现redis限流操作
发表于:2026-10-31 作者:千家信息网编辑
千家信息网最后更新 2026年10月31日,这篇文章给大家分享的是有关java中如何实现redis限流操作的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。具体操作如下。导入所需依赖 UTF-8
千家信息网最后更新 2026年10月31日java中如何实现redis限流操作
这篇文章给大家分享的是有关java中如何实现redis限流操作的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。
具体操作如下。
导入所需依赖
UTF-8 1.8 1.8 5.0.2.RELEASE 1.6.6 1.2.12 5.1.6 3.4.5 org.aspectj aspectjweaver 1.6.8 org.springframework spring-aop ${spring.version} org.springframework spring-context ${spring.version} org.springframework spring-web ${spring.version} org.springframework spring-webmvc ${spring.version} org.springframework spring-test ${spring.version} org.springframework spring-tx ${spring.version} org.springframework spring-jdbc ${spring.version} junit junit 4.12 compile mysql mysql-connector-java ${mysql.version} javax.servlet servlet-api 2.5 provided javax.servlet.jsp jsp-api 2.0 provided jstl jstl 1.2 log4j log4j ${log4j.version} org.slf4j slf4j-api ${slf4j.version} org.slf4j slf4j-log4j12 ${slf4j.version} org.mybatis mybatis ${mybatis.version} org.mybatis mybatis-spring 1.3.0 c3p0 c3p0 0.9.1.2 jar compile org.springframework.data spring-data-redis 1.7.2.RELEASE redis.clients jedis 2.8.1
编写注解
@Retention(RUNTIME)//运行时有效@Target(ElementType.METHOD)//用在方法上 public @interface AccessLimit { int seconds();//时间范围(单位:秒) int maxCount();//在这个时间范围内最大访问次数 }编写拦截器
public class AcessLimiitInterceptor implements HandlerInterceptor { //注入redisTemplate @Autowired private RedisTemplate redisTemplate; @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) { //设置redisTemplate的序列化方式(必须设置为这种方式,因为要用到incr) redisTemplate.setKeySerializer(new StringRedisSerializer()); redisTemplate.setValueSerializer(new StringRedisSerializer()); if(handler instanceof HandlerMethod){ //查看该方法上是否有@AcessLimit注解 HandlerMethod hm= (HandlerMethod) handler; AccessLimit accessLimit=hm.getMethodAnnotation(AccessLimit.class); //没有@AcessLimit注解,证明无限流操作,直接放行 if(accessLimit==null){ return true; } //获取注解的参数值 int seconds=accessLimit.seconds();//时间范围 int maxCount=accessLimit.maxCount();//时间范围内的最大访问次数 //该请求的路径 String key=request.getRequestURI(); //在该时间范围内已经访问的次数 String countStr=redisTemplate.opsForValue().get(key); Integer count=null; //如果不是第一次访问,则把访问次数转换为integer类型 if(countStr!=null){ count= Integer.valueOf(redisTemplate.opsForValue().get(key)); } //拿到访问次数的过期时间 Long keySeconds=redisTemplate.getExpire(key); //该时间范围内没有访问 if(count==null){ //第一次访问,设置key为访问路径,值为访问次数1 redisTemplate.opsForValue().set(key,1+""); //设置过期时间 redisTemplate.expire(key,600, TimeUnit.SECONDS); }else if(count编写application.xml
配置web.xml
Archetype Created Web Application org.springframework.web.context.ContextLoaderListener contextConfigLocation classpath:applicationContext.xml dispatcherServlet org.springframework.web.servlet.DispatcherServlet contextConfigLocation classpath:springmvc.xml 1 dispatcherServlet / characterEncodingFilter org.springframework.web.filter.CharacterEncodingFilter encoding UTF-8 characterEncodingFilter /*
注解应用
@AccessLimit(seconds = 500,maxCount = 3) @RequestMapping(value = "/findAll") public String findAll(Model model){ System.out.println("csl"); return "list"; }感谢各位的阅读!关于"java中如何实现redis限流操作"这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!
时间
次数
范围
注解
最大
内容
方式
方法
更多
第一次
篇文章
路径
UTF-8
不错
实用
单位
参数
序列
文章
看吧
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
A股互联网金融科技公司
互联网科技的
互联网公司 科技公司
互联网科技小贷
为想互联网科技
浩特互联网科技
互联网高科技股票
科技互联网创业计划书
互联网科技英文翻译
互联网科技类展会
老年人脱离互联网科技的作文
互联网金融科技展
中和天地互联网科技有限公司
烟台灵鸽互联网科技有限公司
本届互联网大会上的黑科技
珠海东科互联网科技有限公司
福州德业互联网科技
西安左小互联网科技有限公司
互联网科技创业有什么好项目
中国主要互联网科技公司
科技金融是不是互联网金融
互联网金融监管科技数据
互联网科技会
互联网科技小额贷款
天扬科技互联网广告
互联网还是高科技吗
互联网行业科技股
互联网科技圈年度人物
锡山区互联网智能科技产品供应
中国主要互联网科技公司