环境:多台 web (30)、缓存 (8) 服务器和一台专用数据库服务器。
为了卸载数据库,中央 Redis 缓存和本地内存缓存已就位。
- 大型公共事件数据根据时间表进行缓存和更新
- 访问时单独缓存用户特定数据
当大量用户特定数据需求因事件而更新时,就会出现问题。
事件发生时,大约有 200K 的注册用户和大约 10K-20K 的用户(同时)来到该站点。平均每个用户有 5 个缓存键,总共有 50K - 100K 缓存键,其中包含需要更新的用户特定数据。
当前解决方案失败:
- 刷新用户缓存会使数据库过载(30 个网络服务器)
- 将所有数据加载到缓存中需要很长时间(仅使用了 10%)
- KEYS 和 SCAN 可以阻塞缓存(还没试过……这是个问题吗?)
在这种情况下,最佳做法是什么?