java中如何实现redis限流操作
发表于:2025-11-07 作者:千家信息网编辑
千家信息网最后更新 2025年11月07日,这篇文章给大家分享的是有关java中如何实现redis限流操作的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。具体操作如下。导入所需依赖 UTF-8
千家信息网最后更新 2025年11月07日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安全错误
数据库的锁怎样保障安全
至爱网络技术服务
温州网络安全科技馆
三级及以上网络安全事件
佛山集中控制分布式服务器
数据库安全 百度百科
水环境病原菌数据库
软件开发工程师在哪儿找工作
软件开发技术设计方案
计算机网络技术ppt图文
软件开发和测试管理情况表
2022浪潮服务器一季度财报
常州边缘计算服务器
用户对数据库的需求
农村产权软件开发
软件开发工程师年工作总结
随着网络技术的发展与普及
乡情数据库建设
ftp服务器如何管理用户
wifi设备的邮件服务器怎么设
阜新级差制软件开发
上海新一代网络技术服务资费
自动化服务器的定义
网络安全在线课程免费
共建网络安全文明家园图片
网络安全管理是什么意思
安徽通信软件开发设施服务标准
计算机网络技术包含什么
数据库文本化模式
创建数据库查询窗口报表
互联网词包数据库