00:01
好的。那么下面我们就来看它对字符串的操作的,呃,各种方式吧,第一个。首先要非常清楚的知道啊,咱们学完一个red呢,虽然时间不很长,但是别人一问你red支持哪些数据类型,必须得上打上来啊,这个是必须打上来的,要知道它支持字符串,支持放哈希支持方list的支持方集合和这个有序集合,那么字符串同学们都很清楚,但是哈希类似的列表和集合同学们很很陌生,因为同学们呢,没有学过,呃,这个数据结构啊,嗯,你可以这样去理解啊。呃,虽然你们没有学比我我我比如这样给给你们解释吧,四五十万大家可能知道是什么。但是哈希,如果你不理解的话,你一定学过map。说老师,诶麦好像我们学过啊,对的,你肯定学过麦,大家还记不记得我们麦。
01:02
他是怎么做的呀,其实map是这样子的,它是一个k value,多对k value,就说假设你有你你你存在一个用户的信息,你是这样子的,比如说map。啊脉步,然后呢,这里面嗯,你你你有很多东西,比如说你有个U点一,名字叫UR1的一个脉步,这个U点一呢,里面可能有很多,比如说这个U点零可以放名字。名字,比如叫张三。这个U点呢,哎,这个U点一呢,这个map,它还可以放它的性别。他可以放在性别好,假设是男,以此类推。这个哈希就有点儿像这个迈普。就说他一个,这个哈希对应的名字里面可有多对K86。跟我们map一样,我们一个map可以对应多对k value一个道理,所以说从这我们可以看出来,它只是一种数据的一种组织形式啊,其实本质没有什么,没有一没有一种,没有一种真正的数据叫哈希,他只是把这种数据以哈希的这种方式来管理,对不对?好,这样子就可以了。类似的呢,也很好理解类的,虽然你们没有学过,但是你们学过管道。
02:19
我们前面学个channel。穿,还有我们学过一个站,这个list有点像站加管道的一种结合,有点像。它既可以往屁股后面追,他也可以从屁股前,他也可以头前面加,很有意思说这个历史呢,非常的灵活,我把它总结出它有点像站加一个队列的一种结构。S的集合,这个就好理害理解了,就是一堆数据,诶,我们学过一个数据叫。啊,我们学过一种一种数据就是呃,它一个呢,可以放很多东西进去,它这个这个也是类似啊,也是类似说它这个里面可以放很多数据,比如说我要放这个人名names。
03:07
我有一个集合,这个name names我可以在里面放很多人名,但是它是无序的,还有一个呢,就是我在这个names这个集合里面放很多人名,它是有序的,好大体就是这样子一个说明啊,好明白这个东西呢,我们就来开始来下面讲了啊,这是red数据的正在改啥。RA的这个c rud操作。Crud操作。OK,我来先给他一个标题二,同学们标题二,然后呢,我说了一下咱们这边的五大数据类型。咱们五大数据类型OK了,好,接着往下看。那么有了这五大数据类型过后呢?我们来看下一个字符串。那么字符串是什么呢?字符串是RA的最基本的数据类型,它是一个K对应一个value,就一个K就对应一个value k y6 KY6 KY6,但是有点像,怎么理解呢?比如说同学们,我们学go的时候,我们实际上定一个周算的十寸一。
04:14
这个我我给大家举个例子,你们一下就懂了。比如说十寸一。Hello。诶。这个就是一个字符串,比如说我有一个十寸二。给他一个叫什么呢,张三。张三。张三。那你可以这样理解同学们这个K。这个K就有点儿类似于十尊一和十尊二这个名字。这个值就有点类似于你赋赋给它这个值,这样一下就理解了,说白了,说白了就是用一个K来标识一个字符串,那我们在go里面,我们不是用一个名字去标识一个字符串吗?诶意思一下就到位了,对吧,就这么一个简单的东西啊,一下就说一下子大就应该懂了,没没难度,那么字符串在ready字符串是什么呢?它是二进制安全的,二进制安全它可以存放字符串,普通的文本也可以存放图片,就是说red呢,呃,这个字符串它是可以存图片的啊,你你可以把什么存进去,你把你用那个,比如说打个比方,同学们说老师,嗯,我们我们前面不是学过对文件的读写吗?
05:32
你可以把那个你可以把那个用那个RARA的那个那个B,它一读进来,不是那个BY切片吗?你把这个东西整个一下装在这个red里面都能装进去。啊,理论上都能装进,也就是说你把图片保存到哪里了,保存数据库里面去了,别人看不到,你要读的时候,你把它一读出来,然后再冲一下写回去,它就变成一个图片,还是很有意思,但是呢,一般也没有哪个人吃饱了没事干把图片存在这个数据库里面啊,比如图片很大,十兆,你你把十兆存在内存里面去,很浪费的,因为我们大家刚才看到这个图,这个内存本身是很珍贵的。
06:09
没有哪一个吃饱了没事干说诶,我这一个电影我存到内存里面去,那那吃饱了没事干吗?电影十个G好,你内存本身很珍贵,十个G以下撑满了,你看电影也不方便了,所以一般不会这么干啊,但是它理论上是可以支持的啊,我多说一句,接着往下看,同学们看这个red的字符串呢,它最大是512啊,所以说你存不了那么大啊,它它默认支持512,这是它在设计层面上就这样干的。其言外之意说你你你别给我整的太大了,但是指的是一个啊,如果你有它是指的一个字符串,只能存这么大,那两个字符串就二倍了,好,我们来存放一个信息吧,我们来演示一个,存放一个地址信息是地址北京天安门,说明这个DK就是address,北京天安门就是指来演示一下。
07:01
同学们看啊,我写一个呃,就是set指令set,然后ID啊北京这个我说中文大家看啊,进不去,我一输中文变成一个空格了,我一回车进去了,但是我一获取说老师你能获取到吗。ID其实我是获取到的,你看同学们看这个就是。北京天安门。但有时同说,诶,他怎么变成这个德行了呢?各位同学啊,他在存放的时候,他是转了一下码的。所以说你也不用担心说老师,那我将来在程序里面读出来,难道他也是个吗?不会,如果当你读出来,以字符串的形式打出来,它又变成正确的编码了。所以这个地方呢,只是在我这个控制台是这样子的,因为我的控制台编码,大家可以看到我的控制台编码是GBK码,所以它有可能显示不正确啊,显示不正确,但是用程序读出来它会正确显示啊,所以大家呢,不用特别担心这个事情啊啊这是北京天安门,很简单,我们把它列出列到这里来很简单啊,同学们来吧,字符串,我们先讲字符串。
08:13
好,把它放在这个位置,标题三,当然我举了一些案例,这个案例呢,我是这么写的。举例做了一个说明,对吧,怎么存放的呢?各位同学我是这么存放的。我是这么存放的。好,我重新来写一下啊。Site a,那这个就直接用拼音的,只有北京。回车,好,Get a re,好,北京去。哎,怎么还是这样子呢?好,写错了,刚才site a res,北京。好,Get a,好,这次就正确了。好,这个是我们操作这个指令的一个方式。
09:01
好,截取到我们的笔记中去,这是字符串的操作啊,非常的简单,放这里。好,完事,那么我们字符串操作有哪些需要注意的呢?再来看一下。举例red的字符串的c rud这个site指令,大家看到site指令如果存在就相当于修改,如果不存在,就相当于添加。哎,你看刚才我也是这样操作的,还有呢,Get和delete get就是把那个键值给它写进去,键的名字写进去就可以了。那么delete呢,就代表删除,比如说因为某种情况你不想要这个字符,算了,你可以把它delete掉,怎么delete掉了这些指令啊,同学们,这些指令在勾浪里面也是一样的。所以这一指令大家大家不要学,诶说学完了过,这指你以后用不用得上,完全用得上,因为勾浪它也是这么写的。好,Ad res回车,同学们看我删掉了没有,删掉了我再获取ad re1回车空了。
10:08
这个呢,就是删除之音。啊,你看这我们先把它删掉了。我们先把它删掉了。然后呢,我再去获取的时候,它就变成了一个ne,它就变成一个NEOK,我先给大家保存到笔记里面去。好的,这个是set get就说完了啊,然后呢,我们把这个这个地方也做也给他拿过来,对。这个是对他的一个说明。对它的一个说明。好,放在这里吧,紧接着我们看它的细节,需要注意的地方,我这写了一下,有一个地方需要同学们注意,说老师假设我有这么一个功能,你能不能帮我实现,我需要这个人在线,最多他登录上去过后,他给我在线30秒,我就让他消失在人间,可以。
11:06
你比如说有时候我们放一个放一个留言,我们是保留30秒,如果30秒之内你去就有30秒之后没有了。比如说有些有些这个代码里面有这个需求,我发一个消息,你在30秒之内不取,我就给你删掉,可不可以可以,还有我们有这样一个功能是比如说我们一个人用户在线时间最多,你在这个操作的时候,最多最多操作一分钟30 30分一分钟,如果你没有操作完的话,直接给你退出也可以,那这个时候可以怎么办呢?它有个指令叫set。Set ex,这个ex翻译成英文就是exp,就是超时啊废除的意思啊,啊消除被除一,那么我给大家演示一下啊,同学们,这个指令可以来乘设置这个有效时间。演示一下吧,同学们。好,我我们来看看他的这个指令,非常简单,就是set,把这个K秒和值写进去就完了。
12:07
好,我们来这样子演示一下,走。Set。Site。呃,Ex,比如说我有一个键。K1叫名字吧,比如有消息,Message。零一,当然我给他设置十秒钟这个值是什么值呢?比如说叫做啊哈喽哈喽。哈,这个又。好,写完了回车,大家看我进去了啊,Get message01。可以看到,在可以看到十秒过后看不到了。我们再稍微等等一会儿啊。再回车没了。十秒已经到了,它自动在内存里面有一个机制,他发现你设置了这个超时以后,发现十秒钟过后数据就自动给你销,销毁了,谁来销毁的,大家想一想到肯定是我们这个核心组件在不停扫描。
13:09
他发现十秒过后再去就没有了啊,它就自动给你销毁啊,自动给你销毁,所以这个呢,这个指令呢,可以帮助我们去做一些比较特殊的一些需求,就是需要有定时的啊,定时定时器啊,定时任务,咱们可以这样做好,这个是字符串的,各位同学,这个是字符串的一个操作细节,好把它写到这儿。字符串的一个使用事项。放到这儿啊,同学们。那这个地方呢,我们。好,我们把它写到这个地方,第三号标题。字符串的。好,一写错了。往这儿来。走,同学们。标题三对不对,标题三好,标题三过后呢,我们在这写了一个它的具体的一个使用,对这样子的。好,Site。
14:01
给他设置一个超时。设置一个超市来吧。往这放,然后呢,具体的案例呢,我也给大家准备好了。就这案例。大家可以看到我是怎么做的。哎,你看这里我们给它设置了一个K时间,这个地方就是十秒,有效期为十秒,对不对,然后呢,内容是hello you。好,这个案例很简单。好同学们,那么关于字符串的增删改,我们还有还有还有两个啊比较有用,一个是m set,一个是m get,听这个意思就知道了,M set呢是一次性可以设置多个K86,就我一次性设置多个K6,就有点类似于我们勾量里面一次性声明多个字符串,有点类似于这种感觉,就在在勾里面我们有这种语法怎么写的呢?就说VR。
15:01
VR,然后呢,包起来。对吧,包起来,然后呢,比如说我有一个name等于name等于什么。比如说叫叫做汤姆,还有NAME2等于什么有有点类似这种感觉,就一次性的呢?我定义多个这样的字符串,Jack。好,就是类似这种感觉,那么在RA里面呢,他也可以这么干,怎么干呢?M side k value k value,那么我们来玩一把。来,我们来玩一把啊,打开这里,我们来玩一把,叫m get I set。招,比如说第一个我们要存放什么呢?第一个人的名字,比如说是worker。WORKER01,它的名字是汤姆,再来一个worker。Worker第二个工人的名字是什么呢?是Scott。写完了回车,那这个时候。
16:00
同学们,这个时候相当于我定义了两个字符串,一个字符串的K为WORKER101,一个字符串为零二,它这个关系呢,是给你匹配的啊,那我怎么获取它呢?呃,但是获取的时候我完全可以一个一个获取,说老师我一个一个获取可不可以,当然可以了,比如说我就直接获取到零二,WORKER02,那就是SC。那么有些同学说是我想一次性把它都获取回来,可不可以也可以,就是I'get I get,说我要获取WORKER01这个人,我还要获取WORKER02这个可以又会说两个字都出来了,那如果说翻译到我们的go浪语言了吗?他会给你返回一个什么呀?他会给你返回一个切片。啊,当然也也有可能是个也也可能也可能是个宿组啊,这个反正你一便利就把这个东西拿到了啊,所以说他这个还是很灵活的,所以你完全可以类比来学习,好我把这个呢给同学们也板书到笔记里面去,我们讲了一个刚才讲了ready的一个m set,还有一个m get非常好啊,来我们把它整理到笔记里面去。
17:12
OK,很简单,同学们很简单啊,所以说我们学这个技术呢,只要你呃,只要你这个这个这个就是思路清晰了,还是很容易学好。包括你们做项目以后,只要思路清晰了,没有什么特别难的啊,就你在你在这个开发过程中会遇到一些难的问题,但是呢,呃,这些问题还不不足不足以说你完全解决不了。好,我把这个m get写一下,M get呢是同时获取,同时获取多个多个K8。好,具体的案例,我给同学们粘贴一份,具体案例呢,刚才老师演示了一个对不对,好,我把这个先关闭吧,它老在这捣乱,不要谈了。好,我是怎么演示的呢?各位朋友从这开始的。
18:02
啊,各位请看这里。哎,我在这里呢,设置了两对一对。是他对的好,然后呢,又一对是他。我获取的时候呢,有两种方式,第一种方式就是我还是用传统的方法一个一个的获取。当然我也可以用这种M盖的方式,两个都获取,如果是用这种方式来获取的话呢,在勾浪里面,它会直接给你返回一个应该是切片哈,应该是切片,不是切片的数组啊呃,可以的,它也可以获取到,好,然后呢,我把它放到这里面去。可以了,好啊好,这是字符串这一块我们就说完了,关于字符串的使用咱们就说完了啊,截取一段小视频。
我来说两句