当前位置: 首页 > news >正文

网站备案幕布尺寸wordpress模板显示不全

网站备案幕布尺寸,wordpress模板显示不全,app平台开发需要的资源与团队,佛山设计网站设计价格在 Spring Boot 中实现全局 API 限频#xff08;Rate Limiting#xff09;可以通过多种方式实现#xff0c;这里推荐一个结合 拦截器 Redis 的分布式解决方案#xff0c;适用于生产环境且具备良好的扩展性。 方案设计思路 核心目标#xff1a;基于客户端标识#xff08…在 Spring Boot 中实现全局 API 限频Rate Limiting可以通过多种方式实现这里推荐一个结合 拦截器 Redis 的分布式解决方案适用于生产环境且具备良好的扩展性。 方案设计思路 核心目标基于客户端标识IP/用户ID/Token实现全局请求频率控制技术选型 Redis分布式计数器原子性操作拦截器/过滤器统一处理请求自定义注解灵活配置不同接口的限频策略 算法选择令牌桶算法/滑动窗口推荐使用 Redis 的 INCR EXPIRE 实现简化版固定时间窗口 Redis 的 INCR EXPIRE 不是滑动窗口实现而是典型的 固定时间窗口计数器 实现。两者的核心差异如下 固定窗口INCREXPIRE vs 滑动窗口 特性固定窗口滑动窗口时间窗口边界固定如每分钟重置动态滚动如当前时间的前1分钟实现复杂度简单仅需 INCR EXPIRE复杂需结合 ZSET 时间戳清理流量突增容忍度允许窗口边界突发流量如两个窗口间峰值严格限制任意连续时间段的流量Redis命令开销低单次原子操作高需 ZADD ZREMRANGEBYSCORE 为什么 INCR EXPIRE 是固定窗口 逻辑流程# 伪代码示例每分钟限流100次 current_count INCR rate_limiter_key IF current_count 1:EXPIRE rate_limiter_key 60 # 首次设置过期时间 IF current_count 100:REJECT_REQUEST ELSE:ALLOW_REQUEST问题 窗口边界突增在 00:59 和 01:00 各允许100次请求导致实际在2秒内通过200次。无法动态统计最近1分钟的请求量。 滑动窗口实现方案Redis 滑动窗口需结合有序集合ZSET # 伪代码示例滑动窗口限流1分钟100次 ZREMRANGEBYSCORE request_timestamps -inf (now - 60) # 清理旧记录 ZCARD request_timestamps # 统计当前窗口内请求数 IF count 100:ZADD request_timestamps now now # 记录当前请求时间戳EXPIRE request_timestamps 60 # 更新过期时间ALLOW_REQUEST ELSE:REJECT_REQUEST总结 ✅ INCR EXPIRE适合简单限流场景容忍边界突发流量。✅ 滑动窗口ZSET需精准控制任意连续时间段流量但资源消耗更高。 实现步骤完整代码示例 1. 添加依赖 !-- Spring Data Redis -- dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-data-redis/artifactId /dependency2. 自定义限流注解 Target(ElementType.METHOD) Retention(RetentionPolicy.RUNTIME) public interface RateLimit {// 时间窗口秒int timeWindow() default 60;// 允许的最大请求数int maxRequests() default 100;// 限流维度标识如ip, userIdString keyType() default ip; }3. 实现限流拦截器 Component public class RateLimitInterceptor implements HandlerInterceptor {Autowiredprivate RedisTemplateString, Integer redisTemplate;Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {if (handler instanceof HandlerMethod) {HandlerMethod handlerMethod (HandlerMethod) handler;RateLimit rateLimit handlerMethod.getMethodAnnotation(RateLimit.class);if (rateLimit ! null) {String key buildRedisKey(request, rateLimit);int currentCount getCurrentCount(key);if (currentCount rateLimit.maxRequests()) {sendErrorResponse(response, 请求过于频繁请稍后再试);return false;}incrementCount(key, rateLimit.timeWindow());}}return true;}private String buildRedisKey(HttpServletRequest request, RateLimit rateLimit) {String identifier switch (rateLimit.keyType()) {case ip - request.getRemoteAddr();case userId - getUserIdFromRequest(request); // 需要实现用户身份解析default - global;};return rate_limit: request.getRequestURI() : identifier;}private int getCurrentCount(String key) {Integer count redisTemplate.opsForValue().get(key);return count ! null ? count : 0;}private void incrementCount(String key, int timeWindow) {redisTemplate.opsForValue().increment(key, 1);redisTemplate.expire(key, timeWindow, TimeUnit.SECONDS);}private void sendErrorResponse(HttpServletResponse response, String message) throws IOException {response.setStatus(HttpStatus.TOO_MANY_REQUESTS.value());response.setContentType(application/json);response.getWriter().write({\code\:429, \message\:\ message \});} }4. 注册拦截器 Configuration public class WebConfig implements WebMvcConfigurer {Autowiredprivate RateLimitInterceptor rateLimitInterceptor;Overridepublic void addInterceptors(InterceptorRegistry registry) {registry.addInterceptor(rateLimitInterceptor).addPathPatterns(/api/**); // 拦截所有API路径} }5. 在Controller中使用 RestController RequestMapping(/api) public class DemoController {RateLimit(maxRequests 10, timeWindow 60, keyType ip)GetMapping(/demo)public String demoApi() {return success;} }方案优化点 Lua脚本保证原子性推荐 private static final String RATE_LIMIT_SCRIPT local current redis.call(incr, KEYS[1])\n if current 1 then\n redis.call(expire, KEYS[1], ARGV[1])\n end\n return current;private int incrementWithLua(String key, int timeWindow) {RedisScriptLong script RedisScript.of(RATE_LIMIT_SCRIPT, Long.class);Long count redisTemplate.execute(script, List.of(key), timeWindow);return count ! null ? count.intValue() : 0; }支持动态配置 将限流规则存储在数据库/配置中心使用 RefreshScope 实现热更新 分级限流 不同用户等级普通用户/VIP设置不同阈值敏感接口设置更严格的限制 技术原理图 客户端请求 - 拦截器 - 检查注解 - 生成Redis Key - 执行Lua脚本(原子操作) - 超过阈值返回429 - 未超过则放行生产建议 监控报警通过 Redis 的 INFO STATS 监控限流触发情况降级策略结合熔断框架如 Sentinel实现多级保护白名单机制对内部系统/特殊IP不做限流性能优化使用 Redis Pipeline 批量处理请求 该方案已在多个生产环境验证支持 5000 QPS 的限流需求可根据实际业务场景调整参数。
http://www.yingshimen.cn/news/8805/

相关文章:

  • 网站建设方案策划书ppt模板下载搜狗推广开户
  • 做宣传海报的网站可以入侵的网站
  • 网站制作公司 深圳c2c模式的特点类似于现实商务世界中的跳蚤市场
  • 嘉兴外贸网站建设扁平化资讯网站模板
  • 网站源码怎么绑定域名易语言wordpress发帖
  • 浙江省住房城乡建设厅网站首页东方建设集团有限公司网站
  • 教育公司网站模板成都网站建设收费
  • 有哪些网站是免费学做网页的找别人做网站可以提供源码吗
  • 巴中住房和城乡建设局网站世界军事新闻最新消息
  • 中国建设银行网站首页英文企业网站哪家做得比较好
  • 建设一个网站需要什么硬件七牛图片怎么上传wordpress博客
  • 舟山建设技术学校网站首页php开发一个企业网站价格
  • 帝国做的网站WordPress 媒体库缩略图
  • 能用VUE做网站东莞市网站推广
  • 招生网站建设方案顺义建站设计
  • 假冒网站能通过备案登记吗linux搭建wordpress
  • 利津网站制作拓客团队怎么联系
  • 网站建设平台多少钱开发应用程序的步骤
  • 生成拼贴的网站2016网站谷歌权重
  • 建设网站必须要服务器做电影网站用什么主机好
  • 做面食网站石家庄企业logo设计
  • 一个网站的构建虚拟主机服务
  • 博客推广那个网站列好国内网页加速器
  • 怎样建立自己网站做软件的网站php
  • 郑州o2o网站建设汉狮政协 网站建设
  • 做网站前端和平面配合网络优化及服务的工作任务
  • 最简约的网站学校网站建设的意义与途径
  • 中国风网站建设晋江论坛手机版
  • 网站开发的优势wordpress wp 缺点
  • 相册网站怎么做的上海达安做的无创dna网站