我希望通过在服务提供者和服务客户端之间放置一个缓存层来减轻每次访问数据库的“查找服务”的压力。我希望这个缓存层是持久的,并且可以容纳比 RAM 允许的更多的对象,所以香草 Guava 缓存不会这样做。我研究过 EhCache 和 CouchBase 之类的东西,但出于各种原因决定推出自己的产品。
为这个持久缓存层编写简单的代码非常容易。但是,我对缓存有足够的了解,可以意识到有很多并发问题需要处理,而且我很确定我不会第一次就把它们都搞定。例如,有一个“雷霆群”问题,缓存未命中可能会导致对完全相同的对象的支持服务同时发出大量请求。令我震惊的是,这正是 LoadingCache 已经处理的类型。尝试让 Guava 完成处理并发的难题,然后插入我自己的子类来进行实际的对象检索和存储,这似乎是一个合理的想法吗?我不确定我将子类化或覆盖的确切边界在哪里,但我可以弄清楚这是否是' 这只是一个完全错误的想法。我还没有看到扩展/自定义 Guava 缓存的示例,所以如果有任何示例和/或文档可供查看,我会对这些感兴趣。