spring-boot - Springboot Ehcache 加载数据
问题描述
使用 SpringBoot、Maven、MongoDB、Ehcache 的服务。
服务需要一个快速且频繁的缓存服务器,所以最终我选择了 Ehcache。
所有缓存将以几乎相同的频率被调用,因此在这种情况下没有冷热数据。
MongoDB中的原始数据每天都会通过定时服务进行更新,所以我要做的就是每天将所有更新的数据加载到Ehcache中。
此数据中的每个项目都相互关联,就像您使用一个来查找另一个的相关 Id。因此,如果一个缓存已更新,而另一个缓存没有更新,那么您将找不到这些相关的 Id。我想避免这种情况。
所以我的问题是,有没有办法实现这样的功能,比如使用两个 Ehcache 服务器之类的?即当一个在使用时,另一个可以从MongoDB加载数据。更新完成后,将其切换到更新的那个。所以每天 MongoDB 数据更新时,我必须更新 Ehcache 数据,它不会影响我当前的缓存。这只是我的一个想法。另一个想法是类似于 SQL 事务。有没有其他方法可以实现这一点。
请指教。
解决方案
好问题。我看到了两种方式。
一种是使用应用程序锁。当您准备好重新加载缓存时,您会阻止对它的访问并执行此操作。没有办法同时清除所有缓存。问题是在更新期间一切都会被阻止。
另一种方法是使用其他缓存。因此,您使用新数据加载新缓存,然后交换新缓存和过期缓存。此解决方案的问题在于,在给定时刻,您将占用两倍的内存,因为两个缓存都在内存中。
推荐阅读
- php - 使用 API 的登录函数始终返回登录成功条件
- javascript - 如何使用 jquery 从 Javascript 中提取特定数据字段?
- amazon-web-services - AWS 控制台未列出我的 Elasticsearch 域
- php - 更改 PHP 中的日期格式以包含零
- android - @Parcelize 在多平台项目中
- node.js - 如何使用 Stripe NodeJS SDK 获得更多客户来源?
- ios - Firebase:以匿名模式阻止垃圾邮件用户 - Swift 4
- sql - Django ORM 从日期时间检索月份名称
- javascript - 无法在 gitlab 中使用 sonarqube 加载类错误
- codeigniter - 我的网站说上传 CSV 文件后找不到页面