Skip to content

[功能改进]: 新的拦截器CacheEvictInterceptor #6706

Open
@xxx-tea

Description

@xxx-tea

确认

  • 我的版本是最新版本, 我的版本号与 version 相同, 并且项目里无依赖冲突
  • 我已经在 issue 中搜索过, 确认问题没有被提出过
  • 我已经修改标题, 将标题中的 描述 替换为遇到的问题

功能改进

问题背景:
在缓存一致性场景中,现有解决方案通常需要显式声明受影响表(如@CacheEvict注解),面对新项目可以轻松解决,但是在常规的屎山生产项目来说,使用缓存会遇到两大痛点:

  1. 历史代码中数据变更入口分散,难以全面覆盖缓存清理点,开发成本高
  2. 复杂SQL语句(嵌套查询/JOIN操作等)的表影响关系难以人工维护

功能描述:
对于INSERT/UPDATE/DELETE的sql语句,获取真正受影响的表名,以表名的维度来自定义删除缓存操作,实现缓存数据库一致性

具体功能:

  • 对嵌套查询的支持
  • 对 JOIN 子句的完整支持
  • 对 UNION/UNION ALL 等集合操作的支持
  • 对子查询的支持
  • 对复杂 WHERE 条件中包含子查询的支持
  • 处理了带 schema 的表名
    使用CacheEvictInterceptor,用户可以获取sql改动的表,来自定义接入删除缓存的操作(Redis、本地缓存),并且可以通过MappedStatement的Id过滤。而拦截器要做的就是准确无误的解析出正确的表名。我已经在公司的生产项目应用了一个小demo,主要缓存了8-10张表的下拉框常用业务数据,希望能够抽取公共逻辑加入到mp的拦截器插件中。

参考资料

No response

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions