00:00
各位同学大家好,接下来给大家介绍red地理空间go数据类型,那么在介绍这个数据类型之前,请允许杨哥刷个回马枪啊啊回答我们hyper log log回答一下刚才有位同学的提问,他问我杨哥这个hyper log log他是什么类型的啊?那么这个时候呢,我们来看一下啊,比如说pad hyper log log03 111234,那么同学们请看一代表出加入成功,那么可是人家承认多少个呢?PF cant hyper log log03,同学们请看几个啊,只有四个,因为这两个拿掉去重统计激素,那么type hyper log log03gi是个四菌类型。OK,那杨哥爽死了,Get log log03,那我是不是可以看到里面的东西呢?你别忘了,我们这个log log前面说过了,小白篇只是给大家说了一下基本命理,更底层的这些数学基础统计,我们在高级篇再说,但是这儿要明确一个概念,它不会存储输入元素的本身,所以不会像集合那样返回输入的各个元素,那比如说啊,我这有四个元素啊,你get一下是不是就可以看到那四个元素啊,不是的,它会看到一些它自己内部的一些标识,人家不是保存元素,人家是做激素去虫统计。好那么这个这个答案呢?说一下结论,Hy log logo属于此卷类型。OK,好,接下来回到我们的什么go。
01:28
来吧,老规矩,那大家来看一下这个geo是干什么的,从什么样情况下出来的,什么叫地理空间,那么大家在当今的互联网的应用当中的话呢,经常会看到手机上摇一摇附近的妹子,然后呢美团附近的酒店,然后呢高德地图附近的核酸点,基本上附近的叉叉叉,这种功能又是实时的要高并发数据量还不小这样的一种情况,那么go这种类型绝对天生就是干这个的red非常适合。那么在介绍go之前还是那句话,老规矩小白篇咱们就学基本知识,基操命令,那么对于到后面我们将会给大家编码实战,结合我们微服务和red整合了以后做一个真真正正。
02:19
生产上可以用的一个真实的大厂案例,比如说核酸点或者是美团附近酒店,好,那么回到这儿杀回来先万丈高楼平地起,一切承担靠地基,先学它是什么基本操作命令。首先我们来看一下简介,大家都用过一个东西,是不是叫滴滴打车,那么附近方圆一公里以内,顺风车,出租车最快响应接单的,那么你站在哪?那么大家都清楚一个明白的地方,你认为你站的。地球是个平的还是个圆的,这种最基本的知识不用我多废话吧,你要搞清楚第一个问题,地球是个圆的,你站在那,那么以你周围这个点起始点,我是不是需要有一个坐标值,也记我们的经纬度?好,那么同学们来吧,在移动互联网时代,以地图定定理定位这样的应用越来越多,附近的这些都说过了,那么这种形形色色的叉叉叉附近或者地址位置的值,那么如何实现呢?首先啊,我们大家都清楚,在地球上由于它是个球体,但是我们干系统是不是要把球体变成三维,三维的变成平面对吧?最终我们还是用一个二维的,就像是XY轴的坐标值,俗称经纬度来进行表示,那么我们地球上基本上就是这个,那么至于说经纬度各方面的知识,我们给大家一个链接,不懂的自己下去看啊,大家的这个地理啊,这个九零后嘛,对吧,你们应该地理好像也高考要考吧,对吧,或多或少应该了解,那么这儿不是我们的重点内容,我。
03:48
刷回来一句话,目前我们在什么高德啊,滴滴打车啊,美团啊,都会有这种什么地理信息系统来进行支撑,那么假设啊,滴滴打车最直观的操作就是现在杨哥站在某个地方叫个车,当我们要找车的时候,我们是不是要在数据库里面查找我们自己现在所在的坐标,假设就是个原点它附近。
04:07
半径。多少多少公里以内的内部测量,那么如果我们用以下这种CQ,当然这是条纬CQ啊,就告诉你这个,呃,在我的这个XY,就经纬度坐标X0 Y0这个上面,距离我多少附近以内的,给我弄过来,好假设我们用CQ纯CQ这么来做啊,有什么问题第一个。一到高峰期啊,比如说晚上这个万金那块十点以后下班了,嗯,西二旗西三旗那块是吧,下班了那么一大堆肯定就是高频发的,大家打车,如果随时秒速秒针的去冲击我们的买CQ数据库100%拓款,第二个你查询的是一个剧情范围,因为我们大家是吧,默认在路上都是一个平整的路面,你人。身体的感受,很难说它是个球体,虽然说地球是是个圆的,那么我们这个时候我们可能是一个平面的矩形反问,而不是以我自己为中心的多少半径公里以内的,那么下面还有一个问题叫精准度的功能,我们知道地球呢,它根本不是个平面坐标,而是个求,那么这轴矩形计算在长距离计算的时候,两点之间的坐标距离和直线距离和直线距离它是有误差的,所以得到我们这个结论,我们这叫要搞明白我们的核心思想,就是要把球体转换成平面,那么一个地球铺成一个平面,再划分成网格。
05:30
区块来转,所以说分三步将三维坐标的地球变二维,二维的变一维,最后一维转换成二进制二,再通过倍速32来编码,也就是说我们可能在地理信系统上看到的经纬度,但是底层要算经度和纬度啊,能不能经度和纬度折合成一种编码一个only one,一个固定的值来给我们进行通信和沟通呢?答案是可以的。好,那么对于我们的地理知识啊。不明白的同学,那么自己呢,查一下百度百科经纬线,那么最经典的啊,最长的纬线就是赤道,这个呢,给了大家笔记上这个网址,有兴趣的同学地理上有兴趣同学自己去查,我们这个就不再多说,那么下面我们都清楚啊,G这个数据类型,它不是七做新出现的3.2就已经有了,只不过那个时候3.2这个版本有G这个类型当时是什么年代,大概是2015年,那么对于什么附近的叉叉叉,大家还没有这个诉求,所以就算他有了,我们也没有办法用这个技术。那么随着我们业务的增长和新需求的提出,大家有这样的诉求,回去一查发现哦,天生就淡,所以呢,老规矩,来看看他的命令吧。
06:40
123456好,那么同学们,下面GOAD,那么就是多个经度和纬度位置名称添加到指定的key当中,第二个position,那么这个呢,我就不再照本宣科,干脆咱们就是一个命令实操,对应着讲一个命令,好的,那么同学们。
07:01
首先啊,我们直接呢命令实操,如何获得某个地址经纬度呢?比如说现在杨哥在北京天安门啊,北京王府井诶长城故宫,那么这些地址是如何呢?那么咱们选取百度,大家请看啊,假设现在呢,这个地图上你就可以随便点,实在不行天安门。查一下兄弟们,右边是不是出来了,那么有abcd啊,具体的值经纬度,那么答案呢,都可以看得到,那么该粘贴该拷贝你自行使用来了,那么下面我们来看一下啊,第一个问题,Go添加经纬度坐标,那么来吧。它这个A的意思就是公式G交这个K,然后完了以后怎么着。经度纬度啊,Number经度纬度number好的,那么由于啊,这个坐标值呢,要这么写的话啊。太麻烦了,所以我这提前写好这些命令,我们主要是讲这个东东啊,不是来给大家来操作,比如说GOAD,然后呢,我要写精度维度就懒得写了,再加上Linux下面要切换这个中英文的输入。
08:12
也比较麻烦,所以说呢,杨哥呢,提前给大家呢写好,哎哟我的妈呀,这个呢。好,那么搁到这儿,同学们请看,这个时候代表go是我们的命令city,这是我们的key。那么value。第一个,第二个Y流,第三个Y流,哎,是不是又变成一个真式的值,前面又带着一种分数或者一种维度,只不过这个分数现在变成了地理信息系统里面的经纬度,那么我们可以大胆的猜测一下,大家猜猜go这个命令应该属于什么呀?同学们,你看是不是叫they set,哎,那这个时候同学们就说完了,那么这个时候前面我们已经讲过this that是什么?那现在相信弟兄们呢,也应该清楚,无非就是什么go这个类型C对吧?这是K,以前我们是什么分数V1对吧?现在是不是变成了我们的经纬度V1,然后经纬度二,V2,经纬度三,V3,还是一个什么分数加一个具体的值啊,只不过这个分数变成经纬度,所以同学们。
09:31
所谓的go类型,它是z set的子类。细分是两个不同的,然后呢,回头一看,往上回溯,都是一家人,那么自然而然,They。可不可以要,那么这个时候是不是CT给我全部变列这个里面,哎哟我的妈呀,什么鬼,是不是中文乱码呀。好了,根据我们的推测,Z set,只要是z set命令当然可以用这个,但现在杨哥是中门乱马呀,你从的是天安门故宫,我看不到啊,那么这儿切记red-client-A123,如果有中围乱码问题,加个参数杠杠raw,那么这时候同学O不OK,这是它客户端的事,好吧,那么这说一嘴好,那么同学们。
10:18
这个就得到了我们第一个GOAD添加经纬图坐标,如果有中文乱码,那么添加我们的一个新的参数,两个减号哈杠杠raw。好了,下面我们要返回它的经纬度,Go position,那么来吧,同学们这每一个命令是什么?配合着我们的操作结果,那么我呢,就懒得写了,直接呢给同学们演示GE这个key给我把天安门,故宫长城这三个真实地址的坐标全部给我返回,那么第一个经纬度经纬度经纬度秒懂,我也就不再啰嗦了,OK,好了,那么这个呢,是go position,那么第三个go,哈希返回坐标的哈希表示,这是什么意思呢?你在工作中的时候,你告诉我啊,小数点后面有这么多位,你写程序的时候烦不烦?第二个这是经度的转换,容不容易出错,所以说你这个经纬度一定要做一个映射,那么自然而然。
11:18
经度、纬度,我们希望两个值合二为一,有一个类似于什么?一个对象有个哈西code一样,所以说呢,我们在这儿请看我们的原则啊,Go,哈希算法生成贝斯32位的什么编码值,实际工作中我们是用几哈西?那么三维的变二维的,二维的变一维的,还记不记得刚才那张网格图一回事,那怎么操怎么操作呢?那同学们很简单,Go。哈西,然后city,天安门,故宫长城,那么好了,这个是什么?Go,那么我现在呢,就是go。哈西city,天安门,故宫长城,同学们请看,那么这个时候是不是天安门的这个经纬度的坐标就被我转换成了这么一个东东,当然它底层的转换我们不用去深究,总之一句话,现在是不是经纬度就做了这么一个映射?哎,工作中你就不用去写这么麻烦的,一会数字又长,小数点后面这么多位,哪种数据类型存都不方便,干脆我们直接用哈希机,由哈希来处理好。那么这是我们的第三个命令,那么第四个,同学们请看。
12:28
记二。DT2个位置之间的距离distinct,那么来,同学们请看,说白了就是在这个地理坐标里面,天安门和长城有多少千米,那么这M是米。KM是千米,当然我们在中国不会用什么英尺和英里,那么这个时候大家都清楚啊,咱们在用高德,咱们在用美团的时候,尤其美团它的推荐是不是有一种东西叫附近多少米啊,500米还是一公里还是两公里,对吧,那么所以说呢,在这儿天安门长城那么一样。我们这儿呢,就来看看啊。
13:03
来这个时候,那么同学们,我们呢,直接过来got。然后这个K的话呢,那么就是我们的C啊,那么来吧同学们啊,哎呀,这个切换一下天好,所以说呢,我为什么粘大家清楚了吧,天。阿门,然后呢,这个是我们的固沟。好,那么我们选一个KM。哎,同学们请看多少公里,那么因为天安门和故宫是不是几乎都在一块啊,哎,所以说呢,我们直接呢,米大概多少,是不是900多,哎,这就是两个地标,两个地理坐标里面,它们到底离着有多远,那么同学们呢,可以呢来进行一下处理。好,那么这时候把脑图呢,也给大家粘到这啊,你们直接粘就行了,要不然Linux上面切换值啊,或者呃,我也没有那些客户端了,我呢就嫌麻嫌得麻烦好了,那么同学们就会清楚这个K里面两个直线那个两个给定位置之间的距离大概是多少,好下面这个是什么半径。
14:18
这个非常重要,以叉叉叉半径为中心查找附近的叉叉叉,哎,工作中哈希把经纬度变成一个哈希编码,以这个为半径查找附近的,那么来吧,参数非常多啊,那么同学们请看这个机以什么为给定的经纬度半径来返回,来返回的话,它有限定条件,与中心距离不超过给定的最大距离所有位置值,我们来吧,在这个go。Radius key假设给了我一个我人现在实时站在这儿,这个就是我当前我的发起点,我自己的坐标系经纬度,然后给我找来十公里以内的企业给我返回这个。
15:06
经纬度的,然后前十条记录,且要伴随着是吧哈,是编码的,哎,那么同学们请看啊,这两个是一回事啊,那么我们就先讲下面这条,前面好说,就是比如说现在。当前位置是这个,杨哥现在在北京王府井啊,命令K这是发起人。你自己当前这个位置所在的经纬度给我去找,那么with distinct返回位置原素,同时说白了就是在我这附近十公里以内的,然后呢,With code时间经纬度也一并返回,然后呢,干嘛假设我再加一个啊,With哈希再给我返回以52位有符号整数的这种GU哈希编码的形式,那么同学们搂一眼啊,我们来看看。它返回一些什么什么通道。一回车,同学们请看,假设现在杨哥在北京王府井十公里范围以内的啊,你看王府井的话,是不是离故宫天安门都非常近啊,但是离长城,长城是不是就非常远,所以说超出了十公里以外,人家不给你返回,那么这个时候我在这个地址。
16:18
是北京王府井,那么现在王府井离故沟大概是1.6公里,那么这个是什么?它的这个哈希对应的它算的这个值,然后这个是伴着我们对应的。经纬度坐标,然后给我返回几条十条记录,OK,那么这个呢,也是它内部的一种算法得到的一个值啊好,那么这个同学们请看,我们在这就可以得出。按照你自己现在所在的,那么是不是可以叫车啊?打车啊,找核酸检测中心啊,附近的人啊,附近的酒店啊,都通过这个命令来获得,OK,好,那么接下来。
17:00
半径by members,那么刚才呢,我这儿呢,是写了一个什么,非常精确的一个坐标经纬度对吧?那实际而言,可能你更关心的是我能不能就输一个什么。单词啊,或者具体一点,那么这个是by members,我就不再输入经纬度,我直接输入一个什么中文天安门,哎,那么这时候请告诉我天安门附近十公里以内的与我相关的,比如天门啊,在我们这个K里面,我的要找的是天安门,那么这个K里面刚好有天安门,自己跟自己当然就是零,然后返回了它内部的编码,返回了经纬度,那么这个命令我也就不再敲了,OK,好,那么同学们,这个就是我们G相关的全部命令的讲解,那么后续我们在高级篇再给大家进行进一步的跟Java微服务程序整合,做一个真实的案例,好,那么同学们GE就给大家介绍到这。
我来说两句