redis快取一致性延時雙刪程式碼實現方式詳解
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。
休眠時間不能太大,否則會影響更新的速度。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69901823/viewspace-2914090/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Redis雙寫一致性與快取更新策略Redis快取
- Redis詳解(十二)------ 快取穿透、快取擊穿、快取雪崩Redis快取穿透
- Spring AOP整合redis(註解方式) 實現快取統一管理SpringRedis快取
- springboot註解方式使用redis快取Spring BootRedis快取
- 如何利用Redis實現延時處理Redis
- 基於REDIS實現延時任務Redis
- 快取淘汰、快取穿透、快取擊穿、快取雪崩、資料庫快取雙寫一致性快取穿透資料庫
- 實時獲取建材網商品資料:API實現詳解與程式碼示例API
- myBatis原始碼解析-二級快取的實現方式MyBatis原始碼快取
- Redis快取刪除驅逐策略的工作方式 - codemancersRedis快取
- SpringBoot快取管理(二) 整合Redis快取實現Spring Boot快取Redis
- 如何保證快取(redis)與資料庫的雙寫一致性快取Redis資料庫
- redis 雙寫實現策略 && hash取模Redis
- 【Azure Redis 快取】使用Python程式碼獲取Azure Redis的監控指標值 (含Powershell指令碼方式)Redis快取Python指標指令碼
- 實現SpringBoot + Redis快取的原始碼與教程Spring BootRedis快取原始碼
- 直播間原始碼,透過Redis實現資料快取原始碼Redis快取
- MySQL與Redis實現二級快取MySqlRedis快取
- 如何用REDIS實現分散式快取Redis分散式快取
- 高併發架構系列:Redis快取和MySQL資料一致性方案詳解架構Redis快取MySql
- 詳解低延時高音質:編解碼篇
- 優雅實現延時任務之Redis篇Redis
- WEB 應用快取解析以及使用 Redis 實現分散式快取Web快取Redis分散式
- 幾種實現延時任務的方式(一)
- laravel利用Redis來實現網站快取讀取LaravelRedis網站快取
- Redis快取穿透、擊穿、雪崩,資料庫與快取一致性Redis快取穿透資料庫
- Spring Boot 整合 Redis 實現快取操作Spring BootRedis快取
- SpringBoot中使用Redis實現快取Spring BootRedis快取
- 【SpringBoot】結合Redis實現快取Spring BootRedis快取
- 資料庫與快取雙寫一致性資料庫快取
- REDIS快取穿透,快取擊穿,快取雪崩原因+解決方案Redis快取穿透
- 【Redis】快取穿透,快取擊穿,快取雪崩及解決方案Redis快取穿透
- Mybatis快取詳解MyBatis快取
- 程式碼解決快取穿透和快取雪崩問題快取穿透
- 15.SpringBoot整合Redis快取實現Spring BootRedis快取
- 聊聊如何利用redis實現多級快取同步Redis快取
- Infinispan 8 中新的 Redis 快取儲存實現Redis快取
- 快取與資料庫的雙寫一致性快取資料庫
- 快取高一致性:Meta的快取失效解決方案快取