首页 > 数据库 >redis 切面拦截 防重复提交

redis 切面拦截 防重复提交

时间:2024-01-22 18:12:26浏览次数:38  
标签:point redis request token 切面 key limitRequest 拦截 redisHelper

/**
* aop 防止并发请求
*/
@Slf4j
@Aspect
@Component
public class LimitRequestAspect {
@Autowired
RedisHelper redisHelper;

@Around("@annotation(limitRequest)")
public Object around(ProceedingJoinPoint point, LimitRequest limitRequest) throws Throwable {
HttpServletRequest request = ((ServletRequestAttributes) (RequestContextHolder.currentRequestAttributes())).getRequest();
// 获取token,假设其在Authorization header中
String token = request.getHeader("fleetToken");
//将请求参数的哈希码、请求路径、请求方法作为防止重复提交的键
String key = token + "-" + request.getRequestURI() + "-" + request.getMethod() + "-" + Arrays.hashCode(point.getArgs());
long isSuccess = redisHelper.setnx(key,"0",limitRequest.lockTime());
if (Objects.equals(isSuccess,0L)){
throw new BusinessException("请求太过频繁,请稍后再试");
}
Object result;
try {
result = point.proceed();
} finally {
redisHelper.del(key);
}
return result;
}
}

标签:point,redis,request,token,切面,key,limitRequest,拦截,redisHelper
From: https://www.cnblogs.com/zhuoneng/p/17980670

相关文章

  • 关于spring.redis.cluster集群部分Master节点故障后 交易中断60秒解决方案
     背景  第一种方案:公司项目做性能测试,redis集群选用cluster集群模式,开始选用3主3从,共3台服务器,每个服务器一主一从。    服务器A  redis8001 8002    服务器B  redis8003 8004     服务器C  redis8005 8006    8001主    ......
  • Redis分布式锁
    Redis分布式锁今天在做Lottery分布式抽奖项目中,接触到了分布式锁这个概念,普通单机系统中,我们可以使用mutex、cas等方式来确保不同线程之间的同步和互斥,但是显然在分布式系统下,如果想让所有机器在同一时刻只有一个线程可以访问到某个共享资源,那么传统的互斥方法不再可用。这时候就......
  • 记录使用Redis当分布式锁
    在网上看到一次使用redis当分布式锁的文章,我就自己写了个demo前置条件:建议新建一个springboot工程(添加web依赖),然后自行整合mybatisplus、redis,可以参照以下链接:mybatisPlus:https://blog.csdn.net/wang20000102/article/details/132615071redis:https://blog.csdn.net/lwj_07/art......
  • python redis示例
    Redis是一个基于内存的高性能键值对(key-value)存储系统,同时也支持丰富的数据结构,如字符串、哈希表、列表、集合、有序集合等。在Python中,我们通常使用redis-py这个第三方库来连接和操作Redis。以下是一个基本的使用步骤以及各种数据结构操作的示例:1.安装redis-py库pipinstall......
  • redis 安装教程
    一、初始化环境创建redis运行时的用户和组$groupaddredis$useradd-gredisredis-s/sbin/nologin-M初始化数据目录$rm-rf/data/redis$mkdir-pv/data/redis$chown-Rredis:redis/data/redis初始化日志目录$mkdir-pv/data/logs/redis$chown-Rredis:redis/......
  • 面试官:Redis持久化能关吗?怎么关?
    数据持久化是指将数据从内存中,保存到磁盘或其他持久存储介质的过程,这样做的目的是为了保证数据不丢失。而Redis的持久化功能默认是开启的,这样做的目的也是为了保证程序的稳定性(防止缓存雪崩、缓存击穿等问题)和数据不丢失。Redis持久化能关吗?怎么关?Redis持久化默认是开启的,......
  • django使用redis集群、连接池、MySQL连接池
    redis的相关设置CACHES={"default":{"BACKEND":"django_redis.cache.RedisCache","LOCATION":["redis://127.0.0.1:6379/1","redis://127.0.0.1:6380/1",#...],"OPTIONS":{"CLIENT_......
  • Redis常见面试题
    一、Redis做什么的,在哪些场景下使用Redis是一个开源的内存数据存储系统,它被广泛用于缓存、消息队列、实时统计分析、任务队列等场景。以下是一些常见的使用场景:缓存:Redis的主要用途之一是作为缓存层。它可以将经常访问的数据存储在内存中,以提高读取速度。常见的应用场景包括页面缓......
  • redis后台启动带脚本命令
    redis后台启动带脚本命令(windwos)方法11.新建.txt文件2.编辑文件内容@echooffstartcmd/c"cd/dD:\JAVA\Redis-x64-3.2.100&&redis-server.exeredis.windows-service.conf&&taskkill/f/t/imcmd.exe"改为.bat启动方法2服务启动如果原来已有redis服务,先将其卸载red......
  • 详解Redisson
    第1章:Redisson简介大家好,我是小黑,咱们今天来聊聊Redisson,Redisson不只是简单地对Redis进行了封装,它还提供了一系列高级的分布式Java数据结构,像是分布式锁、原子长整型这种。首先,Redisson的核心特点是什么呢?它提供了对Redis的各种操作的高层封装,这让咱们在使用Redis时更加方便、......