@Cacheable使用共享数据库加速应用程序吗?



我正在使用Spring-boot编写一个服务器端应用程序,比如app1。此app1访问专用数据库服务器上的数据库db1。为了加快数据库访问速度,我将我的一些 JPARepository 标记为@Cacheable(<some_cache_key),过期时间,例如 1 小时。

问题是:db1多个应用程序之间共享,每个应用程序都可能更新其中的条目。

:通过使用应用程序(@Cacheable)中的缓存,我的app1是否会提高性能?(注意,缓存在我的应用程序内部,而不是在数据库内部,即使用像 Redis 这样的缓存管理器屏蔽整个数据库)

以下是我的想法:

  1. 如果另一个应用程序app2修改数据库条目,app1内部的缓存如何知道该条目已更新?然后我的app1缓存过时了,不是吗?(直到它在固定的 1 小时刷新周期后开始刷新)
  2. 如果#1是正确的,那么这是否意味着设置缓存的正确方法应该是使用某种缓存管理器掩盖整个数据库。Redis是用这种用法吗?

所以,那里有很多问题。

我是否会通过使用我的应用程序中

的缓存来提高我的应用程序1的性能 应用(@Cacheable)?

您应该始终对其进行基准测试,但从理论上讲,访问缓存比访问数据库更快

如果另一个应用程序 app2 修改数据库条目,缓存将如何 在 app1 内部 知道该条目已更新吗?然后我的app1的缓存去了 陈旧,不是吗?(直到它在固定的 1 小时后开始刷新 刷新周期)

除非使用群集缓存,否则不会更新它。使用兵马俑集群的Ehcache就是这样的缓存。但是,是的,如果您坚持使用基本的应用程序缓存,它将变得陈旧。

如果#1是正确的,那么它是否意味着正确的设置方式 缓存应该用某种缓存管理器屏蔽整个数据库。是 雷迪斯用于这种用途?

现在它变得微妙了。我不是 Redis 专家。但据我所知,Redis经常被用作缓存,但它实际上是一个NoSQL数据库。而且它不会在前面(再次,据我所知),它会在一边。因此,您将首先查询 Redis 以查看您的数据是否存在,然后查询您的数据库。如果您的数据库访问速度要慢得多,并且您的缓存命中率非常好,它将提高您的性能。但请做一个基准。

真正的缓存(如Ehcache)效率更高。它们添加了近缓存的概念。因此,你的应用将缓存条目保留在内存中,但也保留在缓存服务器上。如果条目已更新,则近缓存将被更新。因此,您可以获得应用程序缓存性能以及服务器之间的一致性。

最新更新