00:00
好,我们来看一下我们的应用程序,我们的应用程序呢?啊,我先给它,呃,这个运行一下,那么在这个应用程序的后台管理系统这块,呃,系统设置数据字典这块,我们说呢,这个数据字典的数据呢,它通常都是从数据库中获取出来的,对不对啊,而且呢,这个数据字典里面的数据呢,它是啊基本上呃,在短时间内不会发生什么大变化的数据,所以说这种数据呢,我们可以呢啊,每一次取出来的时候呢,先从缓存当中去看一看有没有,如果有的话就从缓存当中取,如果没有的话,从数据库当中取啊数据库中取出来之后放在缓存当中,这样的话呢,下一次取的时候从缓存当中取就有了,对吧?所以整个是这样的一个原理啊,那也就是说我们要找到这个方法所在的呃业务层,然后在这个业务层当中呢,给它添加一个呃,这个缓存处理啊,这样的一个业务逻辑,那么我们找到这个方法所在的业务层。
01:01
数据字典获取的业务层,所以呢,我们打开service call,然后呢,在这里面呢,我们。打开这个。Service,然后呢,我们找到service里面的,呃,应该是类吧。我看是哪个。应该是这个。嗯。业务层。业务层类应该是类by parent ID这种方法。是吧?我看一下类似对这个是执行导入的对吧,然后这个是执行导出的,然后这个是最后我们查看数据列表的啊,所以说呢,我们应该在这个方法里面呢去啊添加刚才我们所说的这个业务逻辑,什么样的业务逻辑呢?就在这个位置先首先查询RAID中。
02:07
是否存在数据列表啊,这是第一个第二个。如果存在,那么则从red当中直接返回这个数据列表哈,好,如果存在,则从red中直接返回数据列表,那么这个方法就结束了,就不再往下执行了啊好,如果不存在,则查询数据库。好,然后接下来呢,查询完数据库之后,我们做什么呢?做这个。把这个数据放入数据库里,放入red过程啊,就是你把这个东西真正的返回之前好的,它拿出来放到这啊,然后这是返回数据啊,真正的做寸之前呢,将数据放入或者是存入吧,存入red是吧,应该是这样的一个流程,所以呢,下一次再进来的时候发现呢,因为之前已经从red当中存过了,所以下次再进来的时候呢,就是从red中一看有有数据直接返回了。
03:31
啊,然后咱们怎么做的数据同步呢,就是设一个过期时间就可以了啊,当时间到了的时候呢,下一次他再进来的时候,从当中一查,诶没数据了,没数据呢,他直接又重新查,查完了之后呢,啊,然后把数据存到red,然后又返回,然后下次再进来的时候一看有了又返回了,然后再下一次再进来一看过期了又重新查,所以呢,这个过期时间呢,大家就是得根据实际的这个企业的这个生产环境的一个场景去灵活的设置,它并没有一个固定的过期时间,一定是五分钟或者是一个小时,或者是一天和两天啊,你一定要根据生长环境去灵活的设置好,那么在这个地方呢,啊,我们就。
04:11
去写一下吧,比如说先查询red当中是否存在数据列表,那我们第一件事情要做的呢,就是把templ呢,给它注入进来。好,接下来呢,用这个。然后呢,我们去查查怎么查OS for value,然后点get,跟刚才一样,然后呢,我们打算呢,把这个red呢,存到一个呃,一个一个一个键里面吧,比如说就叫take list,但是其实我们真正的在去调用这个方法的时候,大家知道首先你看到的是ID为一的是吧,Parent ID为一的数据,然后接下来呢,你再展开你看到的可能是parent ID为2万的数据啊,然后你再展开你看到的可能是拍ID为3万的数据,就是说他我们这个数据的不是一次性获取出来的,而是什么?而是每一次查询的时候,它先获取的是顶层数据啊,也就是一级分类,然后你当你点某一个一级分类的时候呢,它获取的是二级分类,那这种情况呢,我们最好的方式呢,就是把每一个分类,比如说一级分类,我们放在一个RA这个键当中,然后把一级分类的所有的二级分类放到。
05:37
另一个键当中,再把一级分类的所有的学历的二级分类再放在另一个键当中,那也就是说我们要根据什么去存呢?根据。这个他的parent ID去存啊,Parent ID是一的,Parent ID是一是这个一的所有的数据,也就是一级分类的数据,我们呢都存到一个键当中,这样的话呢,根据这个键直接拿出第一个类别的数据,然后PID是2万的这些数据,我们呢,再把它存到另外一个2万这个键当中,然后这样的话一拿呢,直接就拿这个数据,所以我们分类把它们存到了当中,那这样的话怎么做呢?啊,我们就给它起不同的名字就行了,比如说date list。
06:19
下面parent ID好,我们见呢,就可以这样写啊,那如果你想写的更完整一点呢,就可以SRB冒号cor冒号好啊,它是层次关系,一会我们可以发现它在red的这个客户端当中体现出来一个层次展示的关系啊,就SRB上荣保这个项目下面的核心微服务下面的list啊,然后呢,他ID等于,比如说等于一的所有的数据列表我们都存起来啊,那怎么存呢?在这个地方首先得先查哈在不在。嗯,Get get完了之后,这块得有个值啊啊,就是date list,然后接下来呢,这面拿到的值是类。
07:12
好,然后这块呢,它是有一个异常的,这异常呢,我们啊可以先暂时处理一下哈,处理一下这个异常的话,它应该是。啊,我看一下啊,它那个快捷键应该是。Ctrl alt加T是不是。把这一段包包起来啊。Ctrl alt加七。哎,那个CTRLL的加七对啊。稍等啊看一下。那我写了他这个。二加七,哎,这出来了,这块刚才不出来哈,刚才这块踹开一下啊,再开,但是我不想开到这,我只想开到这。
08:04
好啊,因为刚才那个这个地方TRY开它,嗯,迟迟不出来,好,那这样的话,我们这么去给它添加一个TRY,然后呢,我们判断什么呢,就判断这个list。它是不是不存在,如果不等于那样的话,就说明它存在对不对,如果它存在,我们是不是直接就可以了啊。是这个意思啊,是这个意思,然后这块呢,我看一下啊。叫做。啊,我还得给他强转一下是吧,没有强这个强转一下。好,然后这块呢,我们给它强转强完,强转完之后呢,我们把它放在这类,放在这个类里面呢,我们把它返回,返回完了之后呢,我们给它进行一个开,为什么要开着呢,大家想在这个地方。
09:10
如果radius取值出错。比如说远程连接报错连不上了。那怎么办?是不是如果不加try catch的话,我们这面就直接就抛异常就出去了,就停止了,但是实际上如果red连不上了,正常情况下我们是不是还可以从数据库当中进行数据的查询呀?明白这意思吧,因为red只是我们为了提高查询效率的一种解决方案,但是一旦red连不上了,是不是数据就没地儿查了呢?不是我们的数据呢,还可以从我们的数据库当中进行查询,所以呢,我们希望这面一旦出现问题,应用程序不要直接抛异常退出,那怎么才能不让让它直接抛异常退出呢?我们在这块加个try catch,并且在这个catch这块呢,我们就直接吞掉异常哈,啊,我们一般情况下的解决方案呢,就直接写个error就行了,就是这块曾经开始了,Red曾经出问题了,是不是red服务器。
10:19
异常啊,然后呢,我们把这个呃E呀,把这个E里面的这个错误跟踪站呀,以字符串的形式写到我们的日志当中,那这个怎么写呢?有一个叫做exception啊啊这样的一个类,然后这个类呢,能帮助我们去。有一个方法,这个方法呢,叫做get,应该是另一个包啊。把这个删一下。对,然后呢,有一个叫做get。
11:02
我看一下啊,Sta这个get sta呢,就是拿到E对象的错误跟踪站字符串。因为每一个异常它抛出来的时候,他肯定有一个错误跟踪站的字符串,对不对啊,来打印在控制台上,那现在呢,我们是主动对这个异常进行补货,然后呢,捕货到这里面,一旦发生某些异常的时候呢,咱们就把这个错误跟踪站的整个的字符串呢,来追加到我们的认知后面,所以这是这样的啊,所以呢,如果详细的写呢,就是如果red存储发生异常,则不要抛除,而是要默默的处理一下打印的日志,然后继续执行后面的部分,从数据库当中去查询数据,是这样的啊,所以这块呢,就是我们从red取值了,然后从数据库中查询,当然了,查完了之后呢,我们要把这个值呢存入red,所以呢是read template.ops for value,然后点set set这边呢,我们原来怎么存的,现在你就怎么取。
12:13
就是它好,然后嗯,Set date前面是见啊,然后这块是我们要存的值这个list,然后接下来呢,我们再去设置一下时间,比如说呢,是time unit minutes,存五分钟。好,这块呢,就是我们将数据存入red啊的解决方案了。好,然后呢,同样同样的道理啊,就是啊,数据全查完了之后,它正好在存red的时候,I red出现问题了,那是不是意味着这个地方要抛异常,然后这个地方就返回回去了,对,是这样的,所以为了避免这样的问题呢,我们同样应该在这个地方再给它加一个什么呀,TRY。
13:02
看catch啊好,然后这块呢,我们就写先写一个日志吧,嗯,写将数据存入red log.in for,将数据填入read,然后那同时我在上面也补充一个位置。这面呢,是从中取出数据是吧。不等于,那那就有值了,这块呢,是从read中获取数据列表啊,然后那如果要是打印到这儿了呢,我们再在这面加上这个呢,是从。数据库中获取数据列表是吧?嗯,好,然后呢,这面也都是一样的哈,后面这块呢,我们也是把错误日志呢,给它打印出来。把这块复制一下吧。
14:00
写到这儿啊好,这块呢,就是整个我们处理的一个流程,然后接下来呢,我们把这个服务器呢,给他重新启动一下。好,这边启动了哈,启动了之后呢,我们来看一下这面就是首先呢,我们先看一下这日志吧,日志这块呢,我我先清空一下,然后接下来呢,咱们去访问啊啊,首先呢,就访问这个默认的这个列表。
15:00
好,然后看看好像是有点,哎,没问题哈,取出来了啊,感觉很紧张,因为它中间有一个存的过程,可能稍微慢了一点啊,然后呢,我们来看一下这面,这面呢,就是首先从数据库中获取数据列表,对吧?啊。也就是说第一版当中实际上是没值的。然后获取完数据列表之后呢。好,然后将数据存入red,好数据呢,已经存到red里了,我们来看一下存没存进来,大家看SRB号date list1对吧,啊,ID为一的这样的数据,或者是说parent ID为一的这样的数据呢,都被序列化到了当前的这个red数据库当中,好,所以这是第一个步骤,存值啊存值,然后接下来呢,我们再把这个清空一下。然后接下来呢,我们再刷新一下页面。好,这回速度快了一些哈,你明显比刚才快了,好,那大家看是不是从red中获取数据列表啊,啊,因为这个刚才我们已经从red当中把这个存进去了,所以呢,它就不再走数据库了啊,就直接打印了,从缓存当中获取,同样,那么这面呢,如果我们点行业好,这个呢,是获取它的这个二级类别,行业下面的二级类别,所以呢,我们来看一下这面。
16:20
刷新,那么就是parent ID为2万的啊,这个数据下面的这个列表呢,也被放到我们的整个red当中了,所以呢,控制台上我们打印的呢,就是从数据库中获取数据列表,然后最后呢,也是将数据存入red对吧?好,现在red已经有了,这个时候呢,我们在其实呢在在在刷新啊,然后再访问,你会发现呢,界面呢,就是两次都是从red中获取数据列表,所以这样的话呢,我们就把red整合到了我们的项目当中啊,当这种频繁需要访问的数据,而且呢,数据这个它的变化啊,又不经常性发生的这样的一个数据,我们呢,就特别适合于把它放在我们的red当中去存储。
我来说两句