缓存使用,前台直接操作mysql,后台操作缓存。怎么保证数据一致性
因项目需要主要模块:
broker(消息服务器)+web(管理员页面)+。。。。
只有一个mysql数据库,web前台可以直接操作数据库,broker基本全是缓存操作。为了保证数据的一致性,在web前台修改数据库后都需要给broker发消息,让broker去刷新缓存。这么做开发很麻烦。但是没有好的方法解决。
有同事说使用第三方缓存,直接与数据库交互保持数据的一致性,避免了每一次web操作数据库都得通知给broker。以前用过第三方缓存,但是只是用到它们的恢复特性,当断电后能够自动恢复缓存功能,没有见过直接同步数据库的。
即使能够直接与数据库进行同步,我所了解的数据库同步机制,是直接读数据库的log文件,其实这样做并不能完全保证数据库和缓存数据的一致性。
求好的解决方案。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
读取binlog是一种方案,我们已经得出方案了,避免不了,因为前台操作后台也需要做出了数据更新以外的其他操作。完全解耦前台和后台是不容易实现的。
有个读binlog的开源工具,读binlog,发mq。
这种第三方缓存,不能够解决实际业务逻辑处理,虽然可以保持数据一致,其实他们的同步机制,也是文件监听实现的,监听binlog,也就是也不能做到前台处理和后台同步。后台不只是更新数据,还有其它逻辑处理。如果第三方缓存具有事件处理机制就好了,当数据更新后能够通知后台,并触发后台相关逻辑处理。
同样得得需要web通知。。。有没有一种方式,面向数据库透明的缓存,就和hibernate缓存似的。数据一致性通过数据库和缓存直接通信。这样就避免了web多余的操作。
可以使用MQ,当前台操作数据库后立即通知MQ由MQ去更新缓存 [4]