00:00
Hello,同学们,接下来呢,我们看一下在rety里如何去连接red,呃,Open rety连接呢,有两个模块我们都可以用,第一个呢,就是我们之前给大家讲过的这个呃,NS,呃,这个这个呃,Redds to ns module,这个是可以用在我们的开源版本的,呃,这个。NG格上的啊,这个也在咱们之前的课程里给大家讲过了,那么这堂课呢,大家来认识一下Lu red,呃,Redis来访问red,它是,呃,纯粹由罗亚脚本来实现的,呃,这么一个redis的客户端。呃,官方的主页在这儿啊,同样它也是oper出品的。嗯,这几个,嗯,Red的这个客户端呢,在使用的时候其实也都差不太多。啊,只是呃,在后期的这个使用上,比如说我们用了呃完全的这个嗯撸语言写的这个客户端,那如果要是有一些比较额外的一些变动呢,那可能呃稍微费点力,我们也能看看源码,可以改一改源码。
01:08
但如果要是这个C语言的,呃,这个模块,我相信大多数或者绝大多数同学呢,也是对这个东西呢,没有什么太大的开发能力的,它的官方文档呢,已经写的非常详细了啊,各种的功能和这个各个命令,那么在这儿呢,也不做过多的解释啊,大家一定在后期的学习当中呢,慢慢养成对这个官方文档的这个阅读的能力。其实老师讲的再多,他也没有这个文档写的更加权威是吧?那在在这呢,咱们给大家跑一个例子,我们看看啊,它是怎么去连接的这个red,这有一个完整的例子。我们把它粘出来。然后在。呃,我的这个撸R脚本这呢,呃,新建一个red就是撸啊,然后让。
02:02
呃。我们的程序呢,直行这个路亚脚本。嗯,在这之前呢,我们用的是这个can by LA block是吧,把它给注掉,还是直接去引用一个脚本过来。点多。然后这上面这个的catch,我们可以先把它给打开。让你变。呃,这个调试的过程啊。咱们把这个NG呢,先给它重启一下,接下来。由后再起。然后看一下。这端口应该是888是吧。哦,现在没有反应,那么看看哦,那个路霸里边没有踪迹吧,应该是。
03:05
代码没粘啊,有点二了。给它给粘过来,然后一会儿咱们再读这个代码是啥意思。刷新。Set OK,然后dog,然后后边是an animal。呃,然后再咱们连一下这个red的自己的这个客户端,我们看看它有没有功能,呃,塞进东西开一个。Cri,然后登进去看看。Dog,有,然后get dog。然an animal,啊,他已经往red里边写入数据了,然后这段代码我们看看是啥意思啊,啊,首先前面呢,刚开始local red这定义一个局部变量对吧,Requirery RA点。
04:00
这是在op re里,呃,默认就已经有的这个工具包,就不需要我们再去额外去下载它的这个代码。然后red new啊,相当于创建一个新的这个,呃,连接出来,然后连接连上连向哪啊,它去CONNECT127.0.0.1,然后6379端口。然后这有连接超时的一个配置啊,默认就是一秒。然后这边会返连接完之后呢,会返回两个这个变量啊,一个叫OK,一个叫A啊,如果要OK里边没有东西的话啊,没有信息,那直接就报错啊,这个连接失败。然后这个去调用red的set命令,这个red是从哪来的呢?大于往上倒啊,是从这儿来的red new出来的这个red这个客户端啊,然后。Set,呃,相当于在呃,Red里去,往里去set一个新的这个key加value进去,然后key是dog value是an animal,然后这里边还是返回两个这个变量,OK和A。
05:07
如果不OK,这是set失败了对吧?然后如果没问题的话呢,呃,注意这有return的操作啊,这个return就不会再继续往下执行了,包括这儿也是一旦报错了,报完错之后记得return,不然的话,你虽然说NG个C,它这个操作已经fail的了,那但是他还会继续往下走是吧?Return的话就整个代码就不再往下执行了。然后set成功之后呢,呃,告诉他set OK了,然后接下来这步操作是get操作,其实很简单,Get这个key还是报,然后如果没成功还是报错。啊,然后如果呃,这个get出来的这个呃值呢,它是空的啊,首先呢是报错,这是错误级别,第二个呢,就是值是空空值,这也可以再给他一个提醒,然后如果也不是空值也没报错,最后呢,把get出来的这个数据呢,给打印出来NG.c这就是这段代码,就比较简单的代码啊,这个red的这个客户端和。
06:06
嗯。之前学那个呃,客户端呢,呃,基本功能一致差不太多,但是还是那句话,它是拿过来对我们比较友好的,你可以打开它的源码看看,里边代码也并不是特别复杂啊,然后在这个呃,工作过程当中呢,如果有什么特殊需求,也可以去做一些定制性的这种二次开发。然后在这个呃,集群环境下呢,有一些第三方的这个呃撸啊撸亚的这个工具包可以拿过来我们去使用。这是red cluster啊,也就是如果要是red呢,我们。并不是只搞了一台机器或者一个主备,那如果有好多机器的话,你就可以用它去完成这个集群上的一些操作。啊,就是这个啊,这个开源项目啊,大家可以如果有需要的话也可以看一看。啊,就支持这个呃,Serverl list了啊,其实也都是撸R代码R脚本实现的,你有呃,如果有有时间或者是有需求的话,也可以自己去实现啊。
07:06
呃,一些功能呢,嗯,其实也都不是特别复杂啊,这就是这个red的这个客户端的使用这两个客户端,呃,如果你不改源码的话,其实用那个也都差不多啊,本来我们去访问red没有什么额外特别的这些需求是吧,只是想从缓存里办。啊,想要的数据给它拿出来,然后展示给前端,那这种比较适合我去存储的一些接口里的这些啊,不太更新的数据,然后直接展示给客户端,直接从去取了,要不以前呢,我还得去这个呃,比如Tom cat,让Tom cat再访,然后访完,访问完之后呢,把这个数据经由tomcat再转交给re,再转转交给NG,然后再给我们的前端用户,这样就在中间呢,省了一个环节啊,就省了这个tomt的操作了啊,你这这这个环节越少,它的速度肯定也就越快,那故障率呢,它也就越低,你你这个把整个调用的链路呢,就给它给缩短了啊,它最快速度呢,就给了我们的用户。
08:08
但这时候一定要保证这个数据性的问题。呃,像这种数据一致性呢,呃要参与,呃进来的节点就比较多,你像N呢,呃需要去这个re去读那写由谁来写,这会儿一般来说不会要让我们的NG去写,除非有一些需求,比如说我去统计计数啊,有用户在这儿,呃疯狂的去刷新我的这个地址,那我。呃,把这个所有用户的IP和他刷新的次数全都记到里,那这会儿N可能会去操作red,但多数这种业务需求,呃,你比如用户访问我的一些菜单栏的这些这个HTL代码啊,或者是一些固定的这些接口啊,或者一天或者一周才更新一次接口,比如说呃,这个天气啊,比如说这个呃,一些这个呃。当天或者是当每周的这个排名啊,它肯定不是及时更新的,那这种数据呢,也可以由N直接从re去取,就不用mcat再过一手了,但是往里写的时候,这会儿这种业务数据呢,肯定不是由N几往里去写的,对吧,那这tomca去维护,那如果要是这个机制性要求比较高的这种需求的话,第一呢,就是不建议写在呃,在在这个N这里去操作red,如果非得去N这里去操作red,还得想达到一致性比较高一些的话,那么这会儿在写入数据的时候,或或者说更新数据的时候呢。
09:36
一定要保证这个呃事物的这个完整性啊,不能那边改了,这边显示不出来,对吧,一定要保证它这个写入能够成功啊,同时缓存和呃这个持久化的这个存储也是数据库,这两个也要保证双写的一致性。啊,你往缓存里写了,但是数据库里没存,一会儿一重启。你缓存的东西没了,再想拉出去拉不出来是吧?呃,所以在呃这种集群环境下,高并发的处理下呢,这不是一个单一的问题,要结合很多技术呢,一起来整合,一起来解决啊这种问题啊。
我来说两句