日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網站首頁 編程語言 正文

redis緩存一致性延時雙刪代碼實現方式_Redis

作者:彼的貓 ? 更新時間: 2022-10-22 編程語言

redis緩存一致性延時雙刪代碼

不廢話、、、如下

1、自定義注解

/**
*@author caoyue
*延時雙刪
**/
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Target(ElementType.METHOD)
public @interface ClearCache {
? ? boolean open() default true;
}

2、刪除邏輯

/**
 * @author caoyue
 */
@Component
@Aspect
@Slf4j
public class DoubleClearCacheAop {
    @Autowired
    private UserService userService;
	//聲明一個用于延時的定時線程池代替線程sleep
    ScheduledExecutorService task = new ScheduledThreadPoolExecutor(10, new BasicThreadFactory.
            Builder().namingPattern("clearCache-schedule-pool-%d").build());
    @Pointcut("@annotation(com.inspur.henan.uac.modules.open.util.ClearCache)")
    private void clearCachePoint() {
    }
    @Around("clearCachePoint()")
    public Object clearCacheAop(ProceedingJoinPoint proceeds) throws Throwable {
        Method method = ((MethodSignature) proceeds.getSignature()).getMethod();
        ClearCache annotation = method.getAnnotation(ClearCache.class);
        Object proceed = null;
        //如果清除注解開啟了
        if (annotation.open()) {
        	//上下文獲取信息
            IPubUser user = MsySecurityContextHolder.getUser();
            if (Objects.nonNull(user)) {
            	//執行清除緩存的動作
                userService._clearCache(user);
                //業務處理
                proceed = proceeds.proceed();
                //延時兩秒后再刪
                task.schedule(() -> {
                    userService._clearCache(user);
                    if (log.isInfoEnabled()) {
                        log.info(Thread.currentThread().getName() + ":double delete cache completed");
                    }
                }, 2L, TimeUnit.SECONDS);
            } else {
                proceed = proceeds.proceed();
            }
        }
        return proceed;
    }
}

redis緩存延遲雙刪問題

高并發場景使用redis作為緩存存儲數據,當數據更新時,如何保證緩存一致性,

延遲雙刪的策略:

先刪除緩存,然后更新數據庫數據,休眠sleep,最后再次刪除緩存數據。

休眠的時間略微大于從數據庫查詢數據的時間。

當讀寫分離時,考慮到主從數據同步延遲,休眠時間約1s。

休眠時間不能太大,否則會影響更新的速度。?

原文鏈接:https://blog.csdn.net/qq_41214487/article/details/124590824

欄目分類
最近更新