良许Linux教程网 干货合集 redis缓存一致性延时双删代码实现方式

redis缓存一致性延时双删代码实现方式

本篇文章重点为大家讲解一下redis缓存一致性延时双删代码实现方式,有需要的小伙伴可以参考一下。

image-20220909222636899

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。

休眠时间不能太大,否则会影响更新的速度。

以上就是良许教程网为各位朋友分享的Linu系统相关内容。想要了解更多Linux相关知识记得关注公众号“良许Linux”,或扫描下方二维码进行关注,更多干货等着你 !

137e00002230ad9f26e78-265x300
本文由 良许Linux教程网 发布,可自由转载、引用,但需署名作者且注明文章出处。如转载至微信公众号,请在文末添加作者公众号二维码。
良许

作者: 良许

良许,世界500强企业Linux开发工程师,公众号【良许Linux】的作者,全网拥有超30W粉丝。个人标签:创业者,CSDN学院讲师,副业达人,流量玩家,摄影爱好者。
上一篇
下一篇

发表评论

联系我们

联系我们

公众号:良许Linux

在线咨询: QQ交谈

邮箱: yychuyu@163.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

关注微博
返回顶部
x
x