数据库 redis 一致性问题

场景:数据库更新,redis 没有更新,查到的数据不一致,而且redis的值来自于几张表表的逻辑组合,因此任何一张表的增删改都影响redis 数据库一致性的问题。

            但是因为并发量小,redis 的值逻辑较多,因此,只需要在更新数据库之后,删除redis缓存的值,为了可以适用其他场景,做了一个切面封装,通过注解方式统一处理redis值的问题

 

采取springboot 自定义注解方式

1.创建自定义注解类:

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface UpdateRedis {
	String redisKey() default "";
}

 

2. 切面方法配置

创建方法类RedisAspect

@Aspect
@Component
public class RedisAspect {
	    Logger log = LoggerFactory.getLogger(RedisAspect.class);
	
	    @Pointcut("@annotation(cn.com.citydo.supervise.dal.annotation.UpdateRedis)")
	    public void redisUpdateCut() {

	    }
	    
	    @After("redisUpdateCut()")
	    public void dataFilter(JoinPoint point) throws Throwable {
	        MethodSignature signature = (MethodSignature) point.getSignature();
	        UpdateRedis updateRedis = signature.getMethod().getAnnotation(UpdateRedis.class);
	        String redisKey = updateRedis.redisKey();
	    	updateRedis(redisKey);
	    	log.info("清空redis:"+redisKey);
	    }
	    
	    public void updateRedis(String redisKey){
	    	 RedisUtils.del(redisKey);
	    }

}

3. 切面作用于service  类

@UpdateRedis(redisKey="redis_source_table_class")
	public ResponseObject save(SourceTableClassSaveRequest sourceTableClassSaveRequest) {
		String sourceCalssParentId = sourceTableClassSaveRequest.getSourceCalssParentId();
		String parentSourceName = sourceTableClassSaveRequest.getParentSourceName();
		if(StringUtils.isEmpty(sourceCalssParentId)&&StringUtils.isEmpty(parentSourceName)){
			return ResponseObject.fail("请选择一级分类");
		}
		

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值