最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Redis與自定義注解實現(xiàn)重復(fù)方式

 更新時間:2025年12月11日 14:12:59   作者:筱筱木  
文章介紹了如何使用Redis和自定義注解`SubmitLock`來防止重復(fù)提交,首先,創(chuàng)建了一個注解`SubmitLock`,然后在需要防止重復(fù)提交的方法上使用該注解,最后,通過一個controller測試驗證了該功能的有效性

1、創(chuàng)建 SubmitLock 注解

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface SubmitLock {
    String key() default "";
}

2、注解實現(xiàn)

    @Autowired
    public RedisUtils redisUtils;

    @Around("execution(* com.example.code_generation..*Controller.*(..)) && @annotation(lock)")
    public Object submitInterceptor(ProceedingJoinPoint pjp, SubmitLock lock) {
        ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();

        HttpServletRequest request = attributes.getRequest();

        String uri = request.getRequestURI();
        MethodSignature signature = (MethodSignature) pjp.getSignature();
        Method method = signature.getMethod();
        //真實類名字
        String targetName = pjp.getTarget().getClass().getName();
        //真實方式
        String methodName = pjp.getSignature().getName();
        //所有的請求參數(shù)
        Object[] arguments = pjp.getArgs();
        Object[] args = new Object[arguments.length];
        SubmitLock localLock = method.getAnnotation(SubmitLock.class);
        String key = setKey(localLock.key(), pjp.getArgs());

        if (!StringUtils.isEmpty(key)) {
            if (redisUtils.get(key) != null) {
                log.error("請勿重復(fù)操作,uri = 【{}】", uri);
                return new RspData<>(BizCodeEnum.WARN, "請勿重復(fù)操作");
            }
            redisUtils.set(key,key,2);
        }
        Object result = null;
        try {
            result = pjp.proceed();
            return result;
        }catch (Throwable throwable){
            throw new RuntimeException("服務(wù)器異常");
        }finally {
            int order = 0;
            for (Object arg : arguments){
                if (arg instanceof ServletRequest || arg instanceof ServletResponse || arg instanceof MultipartFile){
                    continue;
                }
                args[order] = arg;
                order ++ ;
            }
            log.info("調(diào)用Controller方法返回結(jié)果,targetName = {}, methodName = {}, args = {}, result = {}",
                    targetName, methodName, args, result);
        }

    }


    private String setKey(String keyExpress, Object[] args) {
        if (null != args && args.length > 0) {
            keyExpress = keyExpress.replace("arg[0]", args[0].toString());
        }
        return keyExpress;
    }

3、controller 測試驗證

    @SubmitLock(key = "getTest")
    @ApiOperation(value = "獲取代辦任務(wù)")
    @GetMapping("getTest")
    public Object getTest(@CurrentUser UserInfo userInfo) {
        
    }

總結(jié)

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Redis持久化解讀

    Redis持久化解讀

    Redis是一種內(nèi)存級數(shù)據(jù)庫,提供高速讀寫性能,但數(shù)據(jù)易失,它支持三種持久化方式:RDB(快照持久化)、AOF(追加文件持久化)和混合持久化,RDB通過快照將數(shù)據(jù)保存到磁盤,AOF記錄所有寫操作命令,混合持久化結(jié)合兩者優(yōu)點
    2025-01-01
  • 一文詳解如何停止/重啟/啟動Redis服務(wù)

    一文詳解如何停止/重啟/啟動Redis服務(wù)

    Redis是當(dāng)前比較熱門的NOSQL系統(tǒng)之一,它是一個key-value存儲系統(tǒng),這篇文章主要給大家介紹了關(guān)于如何停止/重啟/啟動Redis服務(wù)的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-03-03
  • 使用Redis實現(xiàn)JWT令牌主動失效機制

    使用Redis實現(xiàn)JWT令牌主動失效機制

    JWT是一種輕量級的身份驗證和授權(quán)機制,它是一種 JSON 格式的數(shù)據(jù)串,通常用于客戶端和服務(wù)端之間的單點登錄(Single Sign-On, SSO)場景,本文給大家介紹了如何使用Redis來實現(xiàn)JWT令牌主動失效機制,需要的朋友可以參考下
    2024-08-08
  • Redis 持久化 RDB 與 AOF的執(zhí)行過程

    Redis 持久化 RDB 與 AOF的執(zhí)行過程

    本文給大家記錄Redis 持久化RDB 與 AOF的執(zhí)行過程與配置,通過內(nèi)部觸發(fā) RDB 場景分析Redis 持久化 RDB的相關(guān)知識,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2021-11-11
  • Redis分布式鎖如何自動續(xù)期的實現(xiàn)

    Redis分布式鎖如何自動續(xù)期的實現(xiàn)

    本文主要介紹了Redis分布式鎖如何自動續(xù)期的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-12-12
  • Redis中Hash從使用過程到原理說明

    Redis中Hash從使用過程到原理說明

    Redis Hash結(jié)構(gòu)用于存儲字段-值對,適合對象數(shù)據(jù),支持HSET、HGET等命令,采用ziplist或hashtable編碼,通過漸進式rehash優(yōu)化性能,適用于購物車、計數(shù)器等場景
    2025-09-09
  • Redis中big?keys發(fā)現(xiàn)與解決過程

    Redis中big?keys發(fā)現(xiàn)與解決過程

    文章從bigkeys的定義、產(chǎn)生原因、危害、如何發(fā)現(xiàn)以及處理方法等方面詳細(xì)介紹了Redis中bigkeys的問題,bigkeys會導(dǎo)致請求響應(yīng)慢、網(wǎng)絡(luò)卡頓、數(shù)據(jù)丟失等問題,需要通過異步刪除、拆分key等方法進行處理
    2026-04-04
  • Redis超詳細(xì)講解高可用主從復(fù)制基礎(chǔ)與哨兵模式方案

    Redis超詳細(xì)講解高可用主從復(fù)制基礎(chǔ)與哨兵模式方案

    Redis因為其高性能和易用性在我們后端的服務(wù)中發(fā)揮了巨大的作用,并且很多重要功能的實現(xiàn)都會依賴redis,本篇我們來了解Redis高可用主從復(fù)制與哨兵模式
    2022-04-04
  • Redis設(shè)置database不生效的解決方案

    Redis設(shè)置database不生效的解決方案

    最近在做redis緩存設(shè)置的時候,發(fā)現(xiàn)即使已經(jīng)設(shè)置了database, 但是存數(shù)據(jù)的時候還是用的默認(rèn)0數(shù)據(jù)庫,所以本文就給大家介紹了Redis設(shè)置database不生效的解決方案,需要的朋友可以參考下
    2023-08-08
  • redis?哨兵集群搭建的實現(xiàn)

    redis?哨兵集群搭建的實現(xiàn)

    本文主要介紹了redis?哨兵集群搭建的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-08-08

最新評論

济阳县| 祥云县| 武义县| 梅河口市| 丰宁| 从江县| 萝北县| 稻城县| 甘孜县| 闸北区| 乐安县| 阆中市| 丹凤县| 洪江市| 凤山县| 沈丘县| 丰台区| 隆子县| 句容市| 孝义市| 邵阳县| 农安县| 四川省| 四川省| 万年县| 泌阳县| 肥东县| 敦煌市| 寿宁县| 炉霍县| 龙江县| 上林县| 冷水江市| 离岛区| 玛沁县| 北辰区| 阜平县| 玉龙| 怀来县| 含山县| 班玛县|