美文网首页
通过监控数据库变化实现自动更新缓存的终极解决方案(已验证成功)

通过监控数据库变化实现自动更新缓存的终极解决方案(已验证成功)

作者: 凡星_ | 来源:发表于2019-07-08 19:26 被阅读0次

    当系统达到一定流量时,一般都会通过增加缓存来提高系统性能。下面是最典型的缓存原理图:

    根据上图实现的缓存机制,简单而实用,而且程序也比较简单,确实能大幅度提升系统性能。

    但是当程序往数据库里增加或者更新数据时,就要同时更新缓存,如下图

    当缓存很多,并且如果业务创建缓存的地方分散在各个功能,各个文件里时,很容易导致有些缓存忘记更新,从而导致一些业务上的错误,而这些错误很难通过测试来发现的。

    在实际项目的实践中,缓存的难度主要是在缓存的更新部分。举个例子,假如一个简单用户表结构如下

    ```

    CREATE TABLE `wp_user`  (

      `uid` int(11) NOT NULL AUTO_INCREMENT COMMENT '用户ID',

      `nickname` varchar(50) NULL COMMENT '用户名',

      `mobile` varchar(30) NULL DEFAULT NULL COMMENT '联系电话',

      `login_count` int(10) NULL DEFAULT 0 COMMENT '登录次数',

      `in_blacklist` tinyint(2) NULL DEFAULT 0 COMMENT '是否拉黑',

      PRIMARY KEY (`uid`) USING BTREE

    ) ENGINE = InnoDB AUTO_INCREMENT = 1 ROW_FORMAT = Compact;

    ```

    系统通过用户ID创建一个缓存,缓存的内容是ID对应这个用户的所有信息,即有用户名,电话,登录次数,是否拉黑这些信息。

    - 假如系统提供一个更新用户信息的功能,能更新用户名,联系电话,那么用户在提交数据更新到数据库时,也要更新上面的缓存。

    - 假如用户每次登录时都把登录次数加1,那么更新完后也要更新上面的缓存。

    - 假如管理员在后台把这个用户拉黑,也要更新上面的缓存。

    我们看到上面三个功能都要更新同一个缓存,如果这三个功能都写在一个文件里还好,否则后续要加新的更新操作时就很容易忘了更新。如果是几个程序员协同开发那更是噩梦。

    **有没有一种方法,让缓存不用关心这么多业务更新操作?**

    有,我们可以通过以下方式实现

    业务系统只需要直接更新数据库即可,所有更新缓存的操作都由本终极解决方案自动完成。是不是很清爽,是不是很高大上!

    **它通过减少更新数据库后需要执行一堆更新缓存的业务代码,实现系统代码指数级精简**

    方案实现的教程地址:https://www.kancloud.cn/fanxing/cache

    相关文章

      网友评论

          本文标题:通过监控数据库变化实现自动更新缓存的终极解决方案(已验证成功)

          本文链接:https://www.haomeiwen.com/subject/bjoahctx.html