缓存使用,前台直接操作mysql,后台操作缓存。怎么保证数据一致性

会飞的蝌蚪 发布于 2016/03/26 14:31
阅读 1K+
收藏 0

因项目需要主要模块:

    broker(消息服务器)+web(管理员页面)+。。。。

    只有一个mysql数据库,web前台可以直接操作数据库,broker基本全是缓存操作。为了保证数据的一致性,在web前台修改数据库后都需要给broker发消息,让broker去刷新缓存。这么做开发很麻烦。但是没有好的方法解决。

    有同事说使用第三方缓存,直接与数据库交互保持数据的一致性,避免了每一次web操作数据库都得通知给broker。以前用过第三方缓存,但是只是用到它们的恢复特性,当断电后能够自动恢复缓存功能,没有见过直接同步数据库的。

    即使能够直接与数据库进行同步,我所了解的数据库同步机制,是直接读数据库的log文件,其实这样做并不能完全保证数据库和缓存数据的一致性。  

    求好的解决方案。

加载中
0
曾经的十字镐
曾经的十字镐
可以使用MQ,当前台操作数据库后立即通知MQ由MQ去更新缓存 [4]
会飞的蝌蚪
会飞的蝌蚪
同样得得需要web通知。。。有没有一种方式,面向数据库透明的缓存,就和hibernate缓存似的。数据一致性通过数据库和缓存直接通信。这样就避免了web多余的操作。
0
摩云飞
摩云飞

如果目标是“数据一致性通过数据库和缓存直接通信”,这算是一个比较典型的方案呀,应该不难找到合适的方式的。比如有MySQL触发器自动更新memcached的方案

会飞的蝌蚪
会飞的蝌蚪
这种第三方缓存,不能够解决实际业务逻辑处理,虽然可以保持数据一致,其实他们的同步机制,也是文件监听实现的,监听binlog,也就是也不能做到前台处理和后台同步。后台不只是更新数据,还有其它逻辑处理。如果第三方缓存具有事件处理机制就好了,当数据更新后能够通知后台,并触发后台相关逻辑处理。
0
yongk
yongk
有个读binlog的开源工具,读binlog,发mq。
会飞的蝌蚪
会飞的蝌蚪
读取binlog是一种方案,我们已经得出方案了,避免不了,因为前台操作后台也需要做出了数据更新以外的其他操作。完全解耦前台和后台是不容易实现的。
返回顶部
顶部