使用cacheBuilder實現函數防抖


在接口中出現的相同請求重復且連續發送的情況導致一些業務BUG,需要在接口上實現防抖

使用google的cacheBuilder

import com.google.common.cache.Cache;
import com.google.common.cache.CacheBuilder;

定義一個靜態緩存對象,key值根據我們業務請求報文定義

//初始化緩存 orgkey,設置5秒過期
    public static final Cache<String, Boolean> cahceBuilder = 
                CacheBuilder.newBuilder().expireAfterWrite(5, TimeUnit.SECONDS).build();
//獲取請求報文的唯一鍵,或者使用報文中的某些能請求重復的屬性拼裝
final String key=JSON.toJSONString(request)
//封裝對象,用於判斷是否命中緩存
        final AtomicBoolean flag=new AtomicBoolean(false);
//從緩存中獲取該鍵,如果沒有找到,則執行業務方法
        cahceBuilder.get(key, new Callable<Boolean>() {
            @Override
            public Boolean call() throws Exception {
                flag.set(true);
                //未命中,則執行業務方法
                return true;
            }
        });
        if(flag.get()){
            logger.warn("發送的重復請求被忽略");
        }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM