小韦云链二次开发手册

背景介绍

小韦云科技-区块链+小程序+公众号+商城+分销+直播+企业官网+外贸电商-为您提供优质的开发服务-电话/微信联系:18123611282

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

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

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

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

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

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.bctos.cn/doc/11/1880,否则追究其法律责任

关键词:canal redis php

广告位招商