Redis +“真相来源”DB一致性

时间:2016-08-15 14:22:24

标签: database database-design redis

我正在构建分析工具,并面临基于时间序列的指标的一些性能问题。我一直在尝试使用Redis +位图,这使我能够在数据库写入时急切地准备指标,并对性能非常满意。

但是,我对如何确保我的数据库和Redis保持同步感到有点困惑。我的数据库是真相的来源"存储所有事件数据,但用户仪表板将依赖Redis显示指标。

我是否应该定期完全重新构建我的Redis指标,以确保我的数据库和Redis之间没有差异? (例如:当事件发生时,它被写入数据库,但无法写入Redis)

如果我的Redis服务器出现故障,则需要很长时间才能重新处理所有事件并重建指标。我的仪表板是否应该将数据库作为备份计划查询,即使特定指标的数据库查询逻辑与Redis查询逻辑完全不同?

1 个答案:

答案 0 :(得分:1)

基本上你在这里指的是维护缓存一致性的问题。

首先,您需要确定仪表板过时的陈旧情况。完成后,将其用作限制并为存储在Redis中的数据设置到期日期。请注意,您是如何做到这一点与您选择将结果存储在Redis中的方式紧密相关。

接下来让您的仪表板执行“获取或存储”序列。这意味着您首先查询Redis设置以获取数据,如果找到,则显示它。如果找不到,则查询源数据库,将结果存储在Redis中,设置适当的到期时间并显示它。对于重新启动或重新启动缓存加温,让Redis持久存储到磁盘(默认情况下会这样做),并且在重启时不会丢失条目 - 当然除了过期的条目。

此过程将最大限度地降低过期数据的风险,同时根据请求提供数据的直接更新。另一种选择是将原始数据库中存储事件的内容存储在Redis中。但是,该选项意味着完全重复数据,而不是仅保留Redis仪表板中的“热门”或选择项,以提高仪表板性能。