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

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

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

redis緩存一致性延時(shí)雙刪代碼

不廢話、、、如下

1、自定義注解

/**
*@author caoyue
*延時(shí)雙刪
**/
@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;
	//聲明一個(gè)用于延時(shí)的定時(shí)線程池代替線程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;
        //如果清除注解開(kāi)啟了
        if (annotation.open()) {
        	//上下文獲取信息
            IPubUser user = MsySecurityContextHolder.getUser();
            if (Objects.nonNull(user)) {
            	//執(zhí)行清除緩存的動(dòng)作
                userService._clearCache(user);
                //業(yè)務(wù)處理
                proceed = proceeds.proceed();
                //延時(shí)兩秒后再刪
                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緩存延遲雙刪問(wèn)題

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

延遲雙刪的策略:

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

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

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

休眠時(shí)間不能太大,否則會(huì)影響更新的速度。 

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

相關(guān)文章

  • Redis 在真實(shí)世界的 5 個(gè)用法

    Redis 在真實(shí)世界的 5 個(gè)用法

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

    詳解Redis中的簡(jiǎn)單動(dòng)態(tài)字符串和C字符串的區(qū)別

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

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

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

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

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

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

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

    Redis緩存更新策略詳解

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

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

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

    Redis集群詳解

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

    淺談Redis哨兵模式的使用

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

    詳解Redis瘦身指南

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

最新評(píng)論