springboot自定义注解+aop+redis实现延时双删

本文为博客 VIP 文章,开通 VIP 后可阅读全文

开通 VIP

redis作为用的非常多的缓存数据库,在多线程场景下,可能会出现数据库与redis数据不一致的现象

数据不一致的现象:https://blog.csdn.net/m0_73700925/article/details/133447466

这里采用aop+redis来解决这个方法:

  1. 删除缓存
  2. 更新数据库
  3. 延时一定时间,比如500ms
  4. 删除缓存

这里之所以要延时一段时间再删除,是为了避免多线程情况下,更新数据库的操作还没执行,就执行了第二次删除缓存的操作,此时如果有请求进来,就会读取数据库并将数据写入缓存,这时再更新数据库就会导致数据不一致的问题

两次删除缓存是因为第一次删除缓存后,这时如果有请求进来,得到了数据并写入redis,然后再更新数据库,就会导致数据不一致

  1. 自定义注解
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Target(ElementType.METHOD)
public @interface ClearAndReloadCache {
   
   
    String name() default "";
}
  1. 编写切面,以自定义注解作为切入点
@Aspect
@Component
public class ClearAndReloadCacheAspect {
   
   

    @Autowired
    StringRedisTemplate stringRedisTemplate;

    @Around("@annotation(clearAndReloadCache)")
    public Object innerAround(ProceedingJoinPoint proceedingJoinPoint, ClearAndReloadCache clearAndReloadCache) throws Throwable {
   
   
        System.out.println("----------- 环绕通知 -----------");
        System.out.println("环绕通知的目标方法名:" + proceedingJoinPoint.getSignature().getName());
        Signature signature1 = proceedingJoinPoint.getSignature();
        MethodSignature methodSignature = (MethodSignature
SpringBoot AOP + Redis 延时功能 本文探讨了多线程并发环境下数据库与Redis数据一致性问题及解决方案。当多个请求并发修改数据时,可能出现缓存与数据库不一致的情况。作者提出采用延时策略:1)先除缓存;2)更新数据库;3)延时500毫秒后再次除缓存。该方法通过两次除确保缓存最终一致性,适合读多写少场景。文章还提供了SpringBoot实现方案,包括自定义注解AOP切面处理、Redis配置等完整代码示例,展示了如何通过注解方式实现延时功能,确保数据一致性。 阅读详情

相关推荐

简述SpringBoot AOP Redis如何实现延时功能 ?

定义注解

weixin_39291964的博客 190

Spring自定义注解aop注入方式实现延时功能

/普通的操作说明//spel表达式的操作说明注意:(其中需要能使用spel表达式)3.ClearAndReloadCacheAspect延时切面@Aspect@Component@Autowired/*** 切入点*切入点,基于注解实现的切入点 加上该注解的都是Aop切面的切入点*//*** 环绕通知* 环绕通知非常强大,可以决定目标方法是否执行,什么时候执行,执行时是否需要替换方法参数,执行完毕是否需要替换返回值。

qq_40453972的博客 1291

YOLOv8 交通管理三大核心功能 —— 二、违章检测系统 详细解释及代码完整示例

YOLOv8交通违章检测系统

u010117029的博客 470

Redis保证数据一致性-延时代码实现

Redis和数据库的数据一致性在某些场景下非常重要,如何最大程度保证Reids和数据库之间的数据一致呢?想必大家第一时间会想到延时策略:在修改数据库之前除缓存,然后数据库中的数据修改完成后,再过一段时间再一次缓存。这篇文章就如何实现延时提供了案例代码,代码可能不是最优的,但是确实能够达到的效果。

沐雨橙风ιε的博客 2477

JAVA面试题分享二百三十三:SpringBoot AOP + Redis 延时功能实战

一、业务场景1、此时存在的问题2、解决方案3、为何要延时500毫秒?4、为何要两次除缓存?二、代码实践三、测试验证四、代码工程及地址在多线程并发情况下,假设有两个数据库修改请求,为保证数据库与redis的数据一致性,修改请求的实现中需要修改数据库后,级联修改Redis中的数据。请求一:A修改数据库数据 B修改Redis数据请求二:C修改数据库数据 D修改Redis数据并发情况下就会存在A —> C —> D —> B的情况❝。

之乎者也·的博客 1238

Redis(十三)缓存写一致性策略

缓存一致性

爱喝星冰乐的博客 1万+

技术博客--使用注解实现延迟

通过使用注解AOP,我们成功地实现延迟的功能。这种方法能够灵活地控制数据的除过程,并确保数据不会被误。在实际开发中,我们可以根据需要调整延迟时间,甚至可以根据业务需求定制更复杂的除逻辑。希望本篇博客对你有所帮助!如有任何问题,请随时提问。

weixin_50409893的博客 796

SpringBoot AOP Redis实现延时功能实战】

一、业务场景 在多线程并发情况下,假设有两个数据库修改请求,为保证数据库与redis的数据一致性, 修改请求的实现中需要修改数据库后,级联修改redis中的数据。 请求一:A修改数据库数据 B修改redis数据 请求二:C修改数据库数据 D修改redis数据 并发情况下就会存在A ---> C ---> D ---> B的情况 (一定要理解线程并发执行多组原子操作执行顺序是可能存在交叉现象的) ## 1、此时存在的问题 A修改数据库的数据最终保存到了redis中,C在A之后也修改了数据库数据。 此

jike11231的博客 5748

SpringBoot AOP + Redis 延时功能实战

在多线程并发情况下,假设有两个数据库修改请求,为保证数据库与redis的数据一致性,修改请求的实现中需要修改数据库后,级联修改Redis中的数据。

weixin_44831330的博客 681

SpringBoot AOP + Redis 延时保证数据一致性

SpringBoot AOP + Redis 延时保证数据一致性

qq_42553489的博客 600

使用 Spring Boot + Redis 协同打造延时实战指南!

通过以上的实现和测试,我们成功地使用 Spring BootRedis 协同实现延时策略,有效地解决了数据库与 Redis 数据不一致的问题,提高了系统的稳定性和可靠性。具体来说,就是在更新数据库后,先Redis 中的数据,然后经过一段时间的延迟(例如 500 毫秒),再除一次 Redis 中的数据。此时可能出现的问题是,A 修改数据库的数据最终保存到了 Redis 中,而 C 在 A 之后也修改了数据库数据,这就导致 Redis 中的数据与数据库数据不一致。在上述示例中,我们将。

竹林幽深 264

Redis 延时

Redis 延时

qq_41644707的博客 603

实战解析:SpringBoot AOPRedis结合实现延时功能

ClearAndReloadCache延时注解/***延时**/ClearAndReloadCacheAspect延时切面@Aspect@Component@Autowired/*** 切入点*切入点,基于注解实现的切入点 加上该注解的都是Aop切面的切入点*//*** 环绕通知* 环绕通知非常强大,可以决定目标方法是否执行,什么时候执行,执行时是否需要替换方法参数,执行完毕是否需要替换返回值。

Yaml4的博客 1562

OSU_FreePDK_Pdk_45nm_Free-PDK45_Free!

This is free-pdk 45nm library

上一篇: 自定义注解+拦截器/AOP切面 实现权限管理
下一篇: springboot利用Spring的自动装配,策略模式提高系统接口扩展能力,
ray_zzzzz
博客等级 码龄7年 55粉丝 53原创
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值