Scala 如何在slick之上创建一个可以全局应用的缓存层?

Scala 如何在slick之上创建一个可以全局应用的缓存层?,scala,slick,Scala,Slick,我很好奇如果使用scala和slick,你可以在slick之上创建一个灵活的缓存层(比如使用memcached) Ruby有一个很酷的库,名为IdentityCache: 它允许您简单地扩展模型类(scala中的一个特性?),让它使用这个缓存层 然后,您可以告诉它仅按Id缓存,或者缓存关联等 听起来很酷,这样的东西怎么能适合slick的设计呢?我最近在考虑如何将其添加到slick中,但在可预见的未来,我们没有任何资源分配给它 您可以在Slick上构建一个查询缓存。对于任意查询,根据观察到的对基础

我很好奇如果使用scala和slick,你可以在slick之上创建一个灵活的缓存层(比如使用memcached)

Ruby有一个很酷的库,名为IdentityCache:

它允许您简单地扩展模型类(scala中的一个特性?),让它使用这个缓存层

然后,您可以告诉它仅按Id缓存,或者缓存关联等


听起来很酷,这样的东西怎么能适合slick的设计呢?

我最近在考虑如何将其添加到slick中,但在可预见的未来,我们没有任何资源分配给它


您可以在Slick上构建一个查询缓存。对于任意查询,根据观察到的对基础数据的写入操作使缓存无效可能非常困难。您需要限制缓存查询中条件的支持操作,例如,仅使用相等。Oracle和其他公司对其物化视图维护功能也有类似的限制。

如何在identity\u cache中处理缓存失效?您如何知道何时可以从缓存中读取或何时已过时?例如,如果我在数据库中为某个产品添加新映像,则缓存的产品是否包含该映像,当使用
cache\u是否有很多图像?@cvogt在他们的文档中说
IdentityCache跟踪具有缓存索引的对象,并使用after\u commit钩子使这些对象以及树上的任何对象在更改时过期。
因此,当保存某个对象时,会触发一个事件,使缓存过期。我必须研究当更新子关联时它是如何失效的。我想这个解释确实解释了它,它知道它是一个子关联,所以它在树上上升,因为关联是在运行时定义和已知的。编译器经历了几个阶段。最终,SQL代码在驱动程序和Hi@cvogt中生成,你能告诉我这个特性最近是否在Slick中引入了吗?