欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

redis緩存一致性延時雙刪代碼實現(xiàn)方式

 更新時間:2022年08月26日 14:13:23   作者:彼的貓  
這篇文章主要介紹了redis緩存一致性延時雙刪代碼實現(xiàn)方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

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)) {
            	//執(zhí)行清除緩存的動作
                userService._clearCache(user);
                //業(yè)務(wù)處理
                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緩存延遲雙刪問題

高并發(fā)場景使用redis作為緩存存儲數(shù)據(jù),當(dāng)數(shù)據(jù)更新時,如何保證緩存一致性,

延遲雙刪的策略:

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

休眠的時間略微大于從數(shù)據(jù)庫查詢數(shù)據(jù)的時間。

當(dāng)讀寫分離時,考慮到主從數(shù)據(jù)同步延遲,休眠時間約1s。

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

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

相關(guān)文章

  • Redis 在真實世界的 5 個用法

    Redis 在真實世界的 5 個用法

    Redis是一個開源的使用ANSI C語言編寫、支持網(wǎng)絡(luò)、可基于內(nèi)存亦可持久化的日志型、Key-Value數(shù)據(jù)庫,并提供多種語言的API這篇文章主要介紹了Redis 在真實世界的 5 個用法,需要的朋友可以參考下
    2018-03-03
  • 詳解Redis中的簡單動態(tài)字符串和C字符串的區(qū)別

    詳解Redis中的簡單動態(tài)字符串和C字符串的區(qū)別

    簡單動態(tài)字符串(SDS)和?C?字符串在實現(xiàn)和特性上存在一些區(qū)別,這些區(qū)別使得?SDS?更適合作為?Redis?中字符串對象的內(nèi)部表示,本文給大家介紹一下Redis中的簡單動態(tài)字符串和C字符串的區(qū)別,需要的朋友可以參考下
    2023-12-12
  • redis批量操作pipeline管道操作方法

    redis批量操作pipeline管道操作方法

    Redis本身是基于一個Request一個Response方式的同步請求,正常情況下,客戶端發(fā)送一個命令,這篇文章主要介紹了redis批量操作pipeline管道,需要的朋友可以參考下
    2022-09-09
  • redis實現(xiàn)分布式的方法總結(jié)

    redis實現(xiàn)分布式的方法總結(jié)

    在本篇文章中小編給大家整理了關(guān)于redis分布式怎么做的具體內(nèi)容以及知識點總結(jié),有興趣的朋友們參考下。
    2019-06-06
  • 一文掌握Redis的三種集群方案(小結(jié))

    一文掌握Redis的三種集群方案(小結(jié))

    這篇文章主要介紹了一文掌握Redis的三種集群方案(小結(jié)),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-02-02
  • Redis緩存更新策略詳解

    Redis緩存更新策略詳解

    這篇文章主要為大家詳細介紹了Redis緩存更新策略,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-07-07
  • Redis分布式鎖方案設(shè)計之防止訂單重復(fù)提交或支付

    Redis分布式鎖方案設(shè)計之防止訂單重復(fù)提交或支付

    這篇文章主要為大家介紹了Redis分布式鎖之防止訂單重復(fù)提交或支付方案設(shè)計示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-09-09
  • Redis集群詳解

    Redis集群詳解

    這篇文章主要介紹了Redis集群詳解,需要的朋友可以參考下
    2020-07-07
  • 淺談Redis哨兵模式的使用

    淺談Redis哨兵模式的使用

    這篇文章主要介紹了淺談Redis哨兵模式的使用,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • 詳解Redis瘦身指南

    詳解Redis瘦身指南

    Redis應(yīng)該是開發(fā)者最常用的緩存服務(wù)器了,它豐富的數(shù)據(jù)結(jié)構(gòu),快速高效的內(nèi)存操作能幫助開發(fā)者迅速完成復(fù)雜功能的設(shè)計,作為一個內(nèi)存型數(shù)據(jù)庫,Redis經(jīng)常會遇到內(nèi)存問題,今天我們來談一下Redis常見的內(nèi)存滿的問題,介紹一下給 Redis “瘦身”的通用方式。
    2021-05-05

最新評論