当前位置: 首页 > 网络应用技术

REDIS执行接口限制,注释!

时间:2023-03-08 11:17:50 网络应用技术

  除了缓存外,Redis还可以做很多事情:分布式锁,当前限制,处理请求接口power.essenceSencetoo太多?

  今天,我想与我的朋友谈论使用Redis处理接口限制。这也是最近涉及该知识点的Tienchin项目。我将与您谈论这个主题,视频稍后还将讨论。

  首先,我们创建一个Spring Boot项目,以引入Web和Redis依赖关系。同时,考虑到接口限制通常以注释为标记,并通过AOP分析注释。

  然后提前准备一个REDIS实例。配置我们的项目后,只需配置Redis的基本信息,如下所示:

  好吧,即使准备就绪。

  接下来,我们创建一个限制注入,将当前限制分为两种情况:

  为了应对这两种情况,我们创建了一个枚举类别:

  接下来,让我们创建一个有限的流注入解决方案:

  第一个参数流量限制,这只是一个前缀。将来,完整的键是此前缀加上接口方法的完整路径。一起,它形成了当前的限制密钥。此键将存储在Redis中。

  我了解其他三个参数,所以我不会说太多。

  好吧,将来需要限制哪个接口,并添加可以添加接口的注释,然后可以配置相关参数。

  小朋友知道,在Spring Boot中,我们实际上更习惯使用弹簧数据重新运行重新进行REDIS,但是默认的重新标语具有一个小坑,即JDKSerialization redisserialializer.使用此序列化工具来保留对Redis的键和价值,未来,这将是莫名其妙的,这将导致您在阅读命令时读取错误。

  例如,在存储时,键是名称,值为javaboy,但是当您操作命令行时,您无法获得所需的数据。

  当我们将Redis用作电流时,我们将使用LUA脚本。当使用LUA脚本时,将出现以上情况,因此我们需要修改重新键盘的序列化方案。

  可能有朋友说为什么不使用StringRedistemplate?StringRedistemplate没有上述问题,但是它可以存储的数据类型不够富有,因此在这里不考虑。

  修改重新键盘序列化方案,代码如下:

  这无话可说。我们都在Spring Boot中使用默认的Jackson序列化方法来解决。

  实际上,我以前在VHR的视频中说过。REDIS中的某些原子操作可以通过LUA脚本实施。如果我们想调用LUA脚本,我们有两个不同的想法:

  Spring Data Redis还提供了一个接口来操作LUA脚本,这更方便,因此我们在此处使用第二个解决方案。

  我们在资源目录中创建一个新的LUA文件夹,用于存储LUA脚本。脚本内容如下:

  这个脚本实际上并不困难,我可能知道它在一眼就使用了。Tonumber将字符串转换为数字。REDIS.CALL将执行特定的REDIS指令。具体过程是:

  实际上,该LUA脚本已被充分理解。

  接下来,我们将将此LUA脚本加载到bean中,如下所示:

  是的,我们的LUA脚本已经准备好了。

  接下来,我们需要自定义切割表面以分析此注释。让我们看一下切割表面的定义:

  该切割表面是拦截所有添加注释和处理注释前的注释的方法。

  好吧,我取得了巨大的成就。

  接下来,我们将对界面进行简单测试,如下所示:

  每个IP地址只能在5秒内访问3次。

  可以手动测试此浏览器。

  因为超载时是异常的,所以我们还需要一个全局异常处理器,如下:

  这是一个小型演示,我不会定义物理类,并使用地图直接返回JSON。

  好吧,你可以做到。

  最后,让我们看一下加载时的测试效果:

  好吧,这就是我们将Redis用作限制电流的一种方式。

  兄弟歌曲最近录制了Tienchin项目视频。本文的内容也是Tienchin项目视频的一部分。Tienchin项目使用Spring Boot+VUE3 Technology Stack.Projects,速率超过90%。

  原始:https://juejin.cn/post/7098684459159355405