00:00
好,前面呢,我们整合了red,并且呢,我们测试使用spring boot给我们自带的string red table来操作了red,那接下来呢,我们就来整改我们的业务逻辑,我们就使用我们string red tempt给我们来加入缓存功能,好,我们先来自动注入我们这个操作red的组件,我们的string red tableilet,好,我们就叫red tableilet at一个autowaar,以后我们连接red操作,我们就用它,那接下来我们来加入缓存功能,我们的这个3D分类,即使我们在上一次优化以后,它也比较耗时,它的吞吐量呢也不够,只有我们这个测试的110多,主要呢,它是这个计算量也更大,而这个数据呢经常不变,所以呢,我们可以来加入缓存,那为了方便起见,我把这个方法呢留在这儿,我们再来抽取一个方法,好,这个方法呢,才是我们真正的实现方法,把这个override我们去掉,把这个呢就叫from。
01:01
DB这个呢,就是从数据库来真正查我们这个数据的,好把这个方法放在这儿,它呢是从数据库查询并封装我们整个分类数据,而我们接下来真正的业务逻辑是我们这个,那么这个呢,本应该就来调用我们方法,把方法调用后的返回值给我们返回就行了,但是我们说每次来调用这个方法得到的这个返回值我们都要查数据库进行计算,性能很低下,我们给它加入缓存,所以呢,我们接下来就按照我们的缓存编写逻辑,我加入咱们这个缓存逻辑,那按照缓存逻辑呢,就应该是我们red,因为我缓存是拿red做的,那们先来看我们这个数据在缓存中有没有,那我们red options for value,我们要操作一个KV,比如我们来调用一个点get方法,那这个get呢,我们就按照一。
02:01
的K来进行获取,比如我们这个K,我们就叫cat log杰森,我们按照它呢,我们获取出我们的这个杰森数据,这个相当于我们在red里边把我们这个数据保存的,我们得判断,如果从red里边拿到的这个数据是有的,因为它返回的是一个string,所以我们用string us来进行一个检查,而这个string us呢,我们把这个之前导入的这个错了,我们刚才导的这个string us,我们用的commonlo,我们还是用string加的来写一个strings string us,那先来检查它有没有,我们使用spring framework,点一个its empty,如果从缓存中我们拿到的这个数据它不为空,那说明呢是有数据,如果为空,说明缓存中没有,所以说呢,这样。我们的这一步,那就是第二步,缓存中没有,那没有的话呢,我们就应该在这儿从数据库真正的查询出来,我在这就查询数据库,数据库。
03:09
那查完以后呢,我们还计算整理,那就是调我们的业务逻辑,那当我们从数据库查到数据了以后,那为了方便们还要将查到的数据,查到的数据再放入缓存,放入缓存好,那怎么放呢?还是拿red timet操作,以前呢是给这里边使用catalog,杰森从reddi里面获取的,那现在呢,为了下一次能获取到,还是options for value,那现在呢,是调用set方法来给它保存的,当然保存还是获取,我们K呢,都得用成一样的才能获取到数据,我们存的值是什么?由于我们这个string red temp,我们直接收的是一个string类型的value值,所以我们把我们从数据库里边查来的这个东西不能直接给里边放,那么怎么办呢?我们就应该将查出的对象,将对象我们可以转为杰S,我们放在缓存中,那这样的话呢,我们缓存中相当于存的就是一个杰森字符串,我们注意。
04:10
我们缓存中以后啊,我们缓存中存的所有对象都是杰森字符串,缓存中存的数据是杰森字符串,而且存杰森字符串的好处是什么?我们如果将对象转为杰森存到缓存里边,杰森的好处就是它是跨语言跨平台的兼容,跨语言这个跨平台兼容的,那举一个例子,我们给缓存中存的这个数据,比如是一个物流信息,那有可能呢,我们PHP写的一个物流系统,它还要从缓存中获取,所以呢,我们这个PHP写的这个代码,如果从缓存中拿到的是一个JS数据,那jas呢,大家解析都一样,它就能解析出来,但如果存的是一个我们这个对象的字节流,比如我们使用Java默认的这个序列化机制,我们存到了red里边,那PHP拿到的相当于是Java序列化的内串流数据。
05:06
那PHP也没有整个账号系统,它也不能解析这个流,所以呢,我们以后可缓存中保存复杂对象都存为接省数据,这样呢,全语言全平台都是可以兼容的,好,那么这个拿到的这个杰森数据,同样我们给它里边放的也得放杰森数据,所以我们把这个东西来转一下,我们使用杰森,这个是阿里巴巴fast,杰森提供一个工具,我们有一个叫to杰森string,我们可以把一个任意对象转成一个接省字符串,那我们把我们从数据库里边,我们业务封装好,真正的这个对象我们转成字符串以后,我们再给我们缓存中放,同样的,我们从缓存中拿到的这个数据,我们也不能直接返回出据,因为这是一个字符串,所以我们真正要返回成我们指定的这个对象,还要逆转过来,所以大家一定记着我们这个缓存的使用,就是给缓存中放我们这个JS字符串,然后。
06:06
那拿出的杰森字符串,我们还要逆转成我们能用的对象,还要逆转为。我们能用的咱们这个对象类型,那其实这个过程就是我们说的序列化与反序列化的过程,由于我们这个网络传输,我们在这相当于给内存里边创建了一个对象,我们要存到远程的RA里边,那么肯定得把它整成一个可传输的流数据,或者我们这个串,把这个串呢存到red里边,从red里边拿到这个串,我又得逆转成我们这个对象,这就是我们说的序列化与反律序列化,好,那接下来呢,我们查出的这个东西,我们接下来就要逆转,转为我们指定的对象,那怎么转呢?由于我们当时存的时候存的是这个类型的,所以我们最终转,我们也应该转成这个类型的,好,那这个类型怎么转,这是我们最终返回的结果,Result,好,我们放在这,它这个转法呢,我们也同样使用阿里巴巴提供的我们这个节省工具。节省有一。
07:15
一个pass object相当于把我们一个字符串转成指定的对象,而且我们这个对象呢,由于类型复杂,所以我们还要传一个要转成什么类型,那么就要传一个这个叫type reverence就行了。好,我们要转的字符串就是我们查到的这个catalog杰S,然后呢,我们要转的类型我们以前呢也用过,我们只需要整一个这个类型的type reference,我们就来new一个type reference,由于这个类型呢。它的构造器是受保护的,所以我们相当于还得写一个它的实现类,真正的来钮,所以我们在这直接使用匿名内部类的方式,好,我们把这个类型我们直接放到这儿,我们想要返回这个复杂类型,我就直接在这来写就行了。
08:03
那这就是我们的这个结果转换好,我们把这个转换完成以后。把这一块我们来删掉,把这个转换完成以后呢,将转换的结果最终返回出去,这就是我们加了缓存逻辑。要查我们这个Jason数据,我们先去远程的red里边看有没有,如果red里边没有,我们再去查数据库。我们把查到的数据库的数据,为了下一次方便我们放到缓存中,包括呢,我们查到数据库以后,我们还要返回,我们直接来return,我们将数据库里边查到的结果就可以直接返回,这就是我们直接能用的,这是缓存中没有的逻辑,相当于从数据库查一份放里边,然后再返回,那缓存中有,那相当于这个有了,那我们就直接逆转过来,直接返回,那么加入缓存逻辑以后,我们来进行一个测试,好,那在这来重启一下。来测试一下我们现在的这个性能怎么样。
09:02
好,我们启动成龙,我们先来测试一下我们的这个能不能访问,我们先来测试我们正常的逻辑,那这个index catal log杰森,好把它复制过来,来访问一下local host,我们还是本机的1万端口,来写上1万端口访问index,好,它的index catalog杰森。好,走。好,我们发现这块数据呢,正常返回,而且如果我们有一次查询到了结果以后,我们看这只要我们第一次进来,他先判断缓存中没有。然后查数据库,查到结果以后呢,它会放到缓存中,那接下来我们就来看red red里边肯定就会有数据,我们打开red的客户端来连接上我们这个red,我们来看一下我们新的数据有没有看log杰。诶,我们发现呢,这块数据是完整的,所有结果呢我们都有,那以后我们再要来进行查询,下次呢,它就会从red中看一看,Red中有我们相当于就跳过了我们真正的这个业务逻辑的查询,那现在来看一下,我再来刷新,哎,我发现呢,这这次刷新就会非常的快。
我来说两句