caching - 微服务:同步缓存更新
问题描述
我正在开发一个微服务。该 MS 将部署到 docker 容器中,并由 Kubernetes 进行监控。我必须使用 hazelcast 分布式缓存来实现缓存解决方案。我的要求是:
- 在此微服务启动时预加载缓存。对于大约 3000 家商店,我必须获取两个特定属性并缓存它们。
- 每 24 小时刷新一次缓存。
我实现了 Spring @EventListener 并在启动时对 2 个属性进行数据库调用并执行 @CachePut 并将它们存储在缓存中。
我还有一个带有 cron 表达式的 Spring 调度程序,可以在早上每 6 点刷新缓存。
到目前为止,一切都很好。
但是我没有意识到,在集群环境中——我的微服务的 10-15 个实例将在运行,并将尝试几乎同时执行以上 2 个步骤——从而对我的数据库和缓存产生踩踏效应。有谁知道在这种情况下该怎么做?有什么好的设计,甚至是我可以遵循的平均设计吗?
谢谢。
解决方案
您应该寻求使用 Hazelcast 提供的加载和存储持久数据机制,该机制允许 2 个写入选项:直写和后写以及将数据加载到缓存中的直读。
寻找MapLoader及其方法,它们可以让您预热/预加载集群,并且您可以自由地使用自己的实现来执行此操作。
推荐阅读
- python - 从 None 提高 JSONDecodeError("Expecting value", s, err.value)
- vue.js - 显示图像/图标时包含文本
- animation - 如何创建悬停下拉链接动画?
- python - Keras Tuner 保存最佳模型
- javascript - Object.keys 中的按日期排序未按预期工作
- database - Flutter firebase,如何检索用户数据并将其放在地图或列表中
- javascript - 裸 Python-JS 脚本
- mysql - 从 .csv 文件导入后,是否有人遇到过附加到列条目的额外未知字符?
- kotlin - 在可以包含多个级别的列表列表中查找项目
- java - 通用方法我如何定义我的类类型?