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

2019-07-08  本文已影响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

上一篇下一篇

猜你喜欢

热点阅读