我一直在研究如何可靠地实现直写式缓存机制来存储实时数据。
基本上我们需要的是
Save data to Redis -> Save to database (underlying)
Read data from Redis <- Read from database in case unavailable in cache
在线资源可以帮助实现此缓存策略,但似乎很匮乏。
问题是:
1)Redis与数据库之间没有内置的事务可能性(在我的案例中为Mongo)。
2)没有事务意味着对基础数据库的写入是不可靠的。
我了解如何实现此目的的最直接的方法是使用像Kafka这样的代理,并将消息放在持久队列中,以便以后处理。
因此,Kafka将成为可靠处理的负责实体。
另一种方法是在调度程序中使用自定义实现,以检查Redis数据库中是否存在脏记录。乍一想,这种方法似乎需要权衡取舍,如果可能,我不想走这条路。
我正在寻找一些其他方法来实现它。
或者这实际上是否是最可行的方法。
答案 0 :(得分:0)
因此,比您上面提到的更好的方法是使用kafka和consumer,它将数据存储到mongo。但是请阅读它的交付保证,因为我记得只有一次kafka流(在两个主题之间)保证一次,在您的情况下,您的数据库应该是幂等的,因为您至少获得了一次保证。并且不要忘记使用Redis打开AOF,不要丢失数据。而且不要忘记,在这种情况下,您最终会在db中获得所有结果的一致性。
答案 1 :(得分:0)
在回顾中,我将MongoDB用作一个完全没有Redis的数据存储。
我猜过早的优化是邪恶的。
无论如何,我可以在基准测试之后添加其他架构。
重构缓存的计划应该不会太难。
缩放是另外一个问题,因此我现在不应该在开发过程中为之困扰。
已接受@Ipave回答,目前仅使用一个数据存储。