Redis 直写式缓存

Tra*_*ace 6 java caching redis apache-kafka

我一直在研究如何可靠地实现直写式缓存机制来存储实时数据。

基本上我们需要的是这样的:

Save data to Redis -> Save to database (underlying)  
Read data from Redis <- Read from database in case unavailable in cache  
Run Code Online (Sandbox Code Playgroud)

帮助实施此缓存策略的在线资源似乎很少。

问题是:

1)Redis 和数据库(在我的例子中为 Mongo)之间没有内置事务的可能性。
2)没有事务意味着对底层数据库的写入是不可靠的。

我认为实现这一点的最直接方法是使用像 Kafka 这样的代理,并将消息放在持久队列上以便稍后处理。
因此,Kafka 将成为可靠处理的负责实体。

另一种方法是在调度程序中使用自定义实现来检查 Redis 数据库是否有脏记录。乍一看,这种方法似乎需要一些权衡,如果可能的话,我希望不必走这条路。

我正在寻找一些关于如何以其他方式实现这一点的选项。
或者这实际上是否是最可行的方法。

ipa*_*ave 2

因此,比上面提到的更好的方法是使用 kafka 和消费者将数据存储到 mongo。但是请阅读有关交付保证的信息,因为我记得仅在卡夫卡流中(两个主题之间)保证一次,在您的情况下,您的数据库应该是幂等的,因为您至少得到一次保证。并且不要忘记使用 Redis 开启 AOF,以免丢失数据。并且不要忘记,在这种情况下,您将获得数据库的最终一致性以及所有后果。