zoukankan      html  css  js  c++  java
  • redis通用缓存设计(4)

    前面三篇博客基本上实现了通用缓存的设计。但是在实际开发中,一般将数据不经常改动的业务(比如查询业务)做成缓存,把增删改业务执行完后从缓存中删除掉,通过再次查询把结果纳入缓存,就实现了缓存的实时更新。

    解决方案:设计一个后置通知,在完成增删改操作业务后,把缓存中的数据删除掉,redis缓存中有很多的数据,怎么保证只删除某一模块的数据呢?例如只删除User模块的数据,其他的数据不动

    此时就要考虑到存入redis缓存中key的设计了。之前key=clasZZ + methodName + args 然后再做MD5,现在为了模块与模块之间的数据进行区分,key的设计改为如下:

    key = MD5(clasZZ)+ MD5(methodName+args)  这样就把不同模块之间进行了区分,相同模块的前一部分是相同的。

    在设计后置通知的时候,关于切入点表达式还有一个小细节,如何做到排除查询方法的切入点???

    最初的想法:1. 直接在切入点表达式上进行排除,比如排除以find开头的业务,这样做的弊端:规定开发时查询方法的名称要以find开头。那么我要是想以query开头就不行了

          2. 设计一个自定义注解,在开发增删改业务时,都要加上我开发的这个注解,这样做的弊端:不太符合开发规范,一般这样做不太合乎情理。

    最优的解决方案:最初设计的时候只有查询业务才会纳入redis缓存中,而且在插叙方法都加的有自己开发的自定义注解,此时想要排除查询业务,在切入点表达式中排除有自定义注解的查询方法就行了

    !annotation(* )

    这篇文章先把思路写在这,后续添加代码后就显得清晰了

  • 相关阅读:
    Redis 的基本操作、Key的操作及命名规范
    python离线安装外部库(第三方库)
    STL之deque
    STL之list
    STL学习之vector
    STL三种标准容器
    Lua系统库
    Lua输入输出库
    Lua字符串库
    Lua面向对象
  • 原文地址:https://www.cnblogs.com/lkldeblog/p/11321762.html
Copyright © 2011-2022 走看看