Java 创建Jooq缓存层

Java 创建Jooq缓存层,java,postgresql,caching,jooq,Java,Postgresql,Caching,Jooq,所以,我正在使用Jooq在Postgres上创建一个缓存层。我一直在使用MockConnection/MockDataProvider对象拦截每个查询,这是可行的,但我有一些问题 首先,我如何确定读和写之间的区别?也就是说,如果只有传递到MockDataProvider中execute方法的MockExecuteContext,我如何判断查询是insert/update/etc还是select 我有点搞不清楚我怎么做无效宣告。我现在实现的基本方案是,每当对表进行“写”查询时,我都会使涉及该表的所

所以,我正在使用Jooq在Postgres上创建一个缓存层。我一直在使用MockConnection/MockDataProvider对象拦截每个查询,这是可行的,但我有一些问题

首先,我如何确定读和写之间的区别?也就是说,如果只有传递到MockDataProvider中execute方法的MockExecuteContext,我如何判断查询是insert/update/etc还是select

我有点搞不清楚我怎么做无效宣告。我现在实现的基本方案是,每当对表进行“写”查询时,我都会使涉及该表的所有缓存查询无效。这又回到了我的第一个问题,关于如何区分不同类型的查询,但也带来了另一个问题:如果只给定sql字符串和绑定(两者都是MockExecuteContext的属性),我如何识别查询中使用的表

另外,这是缓存的正确方法吗?我的第一个想法是重写fetch()方法,但该方法是最终的,我不希望更改已经嵌入到Jooq中的内容。这是我能想到的截获所有请求的唯一其他方法,这样我就可以创建一个单独的、持久的缓存层

我已经看到了这个()问题,但我仍然不清楚Lukas建议如何从对象中识别表。我可以尝试实现Postgres NOTIFY,但我首先需要Jooq中的本地语言。我也经常看到这个问题()出现,但我不确定它是如何应用的

请记住,我是Jooq的新手,所以很可能我遗漏了一些明显的东西


谢谢

好的,所以我想出了一个失效的方法:我创建了一个扩展DefaultExecuteListener的自定义类,我将使用每次查询后调用的executeEnd方法来执行失效(尽管我仍然需要弄清楚如何获取表名)。现在,我只需要使用MockConnection来缓存结果并控制数据库访问(仅针对select查询)