在以下场景中我的spring应用程序中使用哪种缓存机制

时间:2017-09-14 00:02:07

标签: spring-boot redis mariadb ehcache hazelcast

我们正在使用带有Maria DB数据库的Spring启动应用程序。我们从差异服务获取数据并存储在我们的数据库中。在调用其他服务时,我们需要从db(基于映射)获取数据并调用服务。 因此,为了避免数据库命中,我们希望将所有映射数据缓存在缓存中,并使用它来检索数据和调用服务API。

所以我们的问题是 - 在数据库中创建数据时在缓存中添加数据(可以添加数百万条记录),并在列值之一的状态为#34; xyz"时从缓存中删除。 (例如)或基于驱逐政策。

我们是否应该使用Hazelcast / ehCache或Redis / Couch基于内存缓存?

请建议。

由于

2 个答案:

答案 0 :(得分:0)

我大多同意Rick的意见,不要在你需要它之​​前构建它,但是现在很重要的是要尽早思考这个缓存层适合以后的位置以及如何集成它(例如使用接口)。将其添加到未准备好的系统中总是可行的,但是更加昂贵(以小时计)并且复杂。

好的实际问题;免责声明:Hazelcast员工

一般来说,缓存Hazelcast,ehcache,Redis和其他人都是很好的候选人。你要问自己的第一个问题是,“我能否在一台机器的内存中保存所有必要的记录。特别是在ehcache中,你得到复制(所有机器都拥有所有信息),这意味着每个节点都需要保留它们在内存中。根据您要缓存的大小,可能不是最佳的。在这种情况下,Hazelcast可能是更好的选择,因为我们在群集中对数据进行分区并优化对单个网络跃点的访问,这对网络延迟的开销最小。

第二个问题是序列化。您是否希望将信息存储在高度优化的序列化中(需要将代码转换为人类可读的代码),还是要将其存储为JSON?

第三个问题是关于访问数据存储的客户端和线程的数量。显然,像ehcache这样的本地缓存总是最快的选择,用于权衡大量内存。除此之外,最重要的事实是内存商店使用的踩踏模型。它要么是多线程的,要么很好地扩展,要么是单线程概念,当你耗尽这个线程时,这个概念会成为瓶颈。它是为了克服更多的流程,但它是一种解决方案,可以充分利用当今的系统。

更一般地说,您提到的每个系统都可以完成这项工作。然而,最佳工具应该由POC /原型和您的真实世界用例选择。重要的一点是现实世界,因为单个线程在低压下表现得很惊人(显然速度更快),但是当用尽时将成为主要瓶颈(再次明显延迟响应)。

我希望这有点帮助,因为至少在我看来,每个回答都是“我们是最好的选择”对于那个说出来的人来说是立竿见影的。

答案 1 :(得分:0)