前面三篇博客基本上实现了通用缓存的设计。但是在实际开发中,一般将数据不经常改动的业务(比如查询业务)做成缓存,把增删改业务执行完后从缓存中删除掉,通过再次查询把结果纳入缓存,就实现了缓存的实时更新。
解决方案:设计一个后置通知,在完成增删改操作业务后,把缓存中的数据删除掉,redis缓存中有很多的数据,怎么保证只删除某一模块的数据呢?例如只删除User模块的数据,其他的数据不动
此时就要考虑到存入redis缓存中key的设计了。之前key=clasZZ + methodName + args 然后再做MD5,现在为了模块与模块之间的数据进行区分,key的设计改为如下:
key = MD5(clasZZ)+ MD5(methodName+args) 这样就把不同模块之间进行了区分,相同模块的前一部分是相同的。
在设计后置通知的时候,关于切入点表达式还有一个小细节,如何做到排除查询方法的切入点???
最初的想法:1. 直接在切入点表达式上进行排除,比如排除以find开头的业务,这样做的弊端:规定开发时查询方法的名称要以find开头。那么我要是想以query开头就不行了
2. 设计一个自定义注解,在开发增删改业务时,都要加上我开发的这个注解,这样做的弊端:不太符合开发规范,一般这样做不太合乎情理。
最优的解决方案:最初设计的时候只有查询业务才会纳入redis缓存中,而且在插叙方法都加的有自己开发的自定义注解,此时想要排除查询业务,在切入点表达式中排除有自定义注解的查询方法就行了
!annotation(* )
这篇文章先把思路写在这,后续添加代码后就显得清晰了