使用Elasticsearch进行Spring缓存实现

时间:2017-11-13 15:48:22

标签: java spring elasticsearch spring-cache

我有一个分布在9个虚拟机之间的服务。 我想创建一个将在所有这些之间使用的缓存。 到目前为止,我正在为每个VM使用单独的缓存,这使我在所有VM之间存在不一致。

我已经使用了弹性搜索,所以我想知道是否可以将ES用作缓存层+弹簧缓存抽象。

该服务采用Java 8 + Spring Boot + ES 5.2.2

编辑:

附加信息,我服务的原始问题是我需要在不到100毫秒的时间内返回响应,也就是当我开始使用ConcurrentCacheManager使用简单的弹簧缓存实现时,工作速度很好,并且缓存应该每小时刷新一次〜,现在我已经有大约1300个需要缓存的对象,所以在每个服务启动时,我都有一个进程,用我所有的响应来填充缓存。我们得到了另一个每小时左右醒来的过程会刷新带有更新数据的条目。这将发生在9个vms的每一个。 这个系统的问题是: 1.我会每小时点击另一项服务多次9次,并获得所有信息(它可以处理它但如果只有一个vm会更好) 2.如果我需要使用新信息更新缓存中的特定条目或将其全部删除,我没有问题的方法将其从我池中的所有虚拟机中删除。 3.由于每个vm在稍微不同的时间内运行缓存刷新,因此缓存不会在所有VM上对齐,并且对LB的相同调用可以从不同的特定VM返回不同的结果。 4.目前我只有1300个对象需要缓存,但它可以成倍地指向数百万条目,而且我不想陷入内存不足的问题。

我理解它不是理想的缓存系统用途,我可能会使用错误的术语来表达我想要的东西,但基本上我需要一个可以通过我的服务访问的良好且快速的名称 - 值存储系统。如果它可以使用spring-cache抽象,那将会很棒,因为它非常易于使用,并且已经在我的服务中实现了。

谢谢, 甲

1 个答案:

答案 0 :(得分:0)

您可以轻松地将Hazecast或EHCache集成为spring应用程序的分布式缓存。

可能是我,但我发现将Elastic Search用作缓存是一个奇怪的选择。