6、地理空间(GEO)类型简介:
6.1.什么是GEO:
- 1.GEO主要是用于地理位置信息,
并对存储的信息进行操作
,包括:- 添加地理位置的坐标
- 获取地理位置的坐标
- 计算两个位置之间的距离
- 根据用户给定的经纬度坐标来获取指定范围内的地理位置集合
- 2.SQL进行地理位置查询的缺点:
select taxi from position where x0-r < x < x0 + r and y0-r < y < y0+r
- 查询性能问题,如果并发高,数据量大这种查询是要搞垮数据库的
- 这个查询的是一个矩形访问,而不是以我为中心r公里为半径的圆形访问。
- 精准度的问题,我们知道地球不是平面坐标系,而是一个圆球,这种矩形计算在长距离计算时会有很大误差
6.2.命令:
如何获取某个地址的经纬度:
- 百度地图可以获取
a.GEOADD添加经纬度坐标:
- 1.命令:
GEOADD city 116.403963 39.915119 "天安门" 116.403414 39.924091 "故宫" 116.024067 40.362639 "长城"
- 2.当有中文乱码的时候,
需要加--raw参数,这是客户端的原因:
b.GEOPOS返回经纬度:
d.GEOHAS:返回坐标的geohash表示:
a.命令
b.说明:
- 1.geohash算法生成的base32编码值,3维变2维再变1维
c.GEODIST:两个位置之间的距离:
- 命令:
GEODIST city 天安门 故宫 km
f.GEORADIUS:
- 1.
georadius
以给定的经纬度为中心, 返回键包含的位置元素当中, 与中心的距离不超过给定最大距离的所有位置元素 GEORADIUS city 116.418017 39.914402 10 km withdist withcoord count 10 withhash desc
GEORADIUS city 116.418017 39.914402 10 km withdist withcoord withhash count 10 desc
说明:
WITHDIST:
在返回位置元素的同时, 将位置元素与中心之间的距离也一并返回。 距离的单位和用户给定的范围单位保持一致WITHCOORD:
将位置元素的经度和维度也一并返回WITHHASH:
以 52 位有符号整数的形式, 返回位置元素经过原始 geohash 编码的有序集合分值。 这个选项主要用于底层应用或者调试, 实际中的作用并不大COUNT
限定返回的记录数。
案例: 当前位置(116.418017 39.914402)
g.GEORADIUSBYMEMBER:
7、基数统计(HyperLogLog)类型:
7.1.什么是基数统计:
- 1.HyperLogLog主要是用于
做基数(不重复的数字或者ip,重点是不重复,这就是基数)统计的算法
,HyperLogLog的优点是:在输入元素的数量或者体积非常非常大的时候,计算基数所需的空间总是固定且很小的 - 2
.在redis中,每个HyperLogLog键只需要花费12KB内存,就可以计算2的64次方的不同元素的基数
,这和基数计算时,元素越多内存消耗就越多的集合形成鲜明对比 - 3.但因为HyperLogLog只会根据输入元素来计算基数,而
不会存储输入元素本身
,所以HyperLogLog不能像集合那样,返回输入的各个元素
7.2.基本命令:
7.3.应用场景:
8、位图(bitmap)类型:
a.什么是位图:
- 1.位图(bitmap)是由0和1状态表现的二进制位的bit数组
说明:
用String类型作为底层数据结构实现的一种统计二值状态的数据类型
- 位图本质是数组,它是基于String数据类型的按位的操作。该数组由多个二进制位组成,每个二进制位都对应一个偏移量(我们称之为一个索引)。
- Bitmap支持的
最大位数是2^32位
,它可以极大的节约存储空间,使用512M内存就可以存储多达42.9亿的字节信息(2^32 = 4294967296)
c.基本命令:
setbit命令
:Bitmap的偏移量是从0开始算的
getbit命令
:
strlen命令
:统计字节占用多少,不是统计字符串的长度,而是占据了几个字节。超过8位后自己按照8位一组byte进行扩容
bitcount
:全部键里面含有1的有多少个
:
bitpop命令
:假设统计连续2天都签到的用户
- 1.加入某个网站或者系统,它的用户有1000W,
做个用户id和位置的映射
- 比如0号位对应用户id:uid-092iok-lkj
- 比如1号位对应用户id:uid-7388c-xxx
- 2.登录登记:
可以看到连续2天登录的人有:
2个
setbit和getbit案例说明:
- 1.案例:登记某个人在2021年6月的每一天签到情况
- 2.查询某个人在2021年6月份签到的总天数:
b.应用场景:
主要用于状态的统计,Y、N,类似AtomicBoolean
- 可以用于
定义今天是否签到、是否打卡、是否有相同的爱好、电影广告是否被点击过等场景
9、位域(bitfield)位域(了解):
a.bitfield是什么:
b.bitfield可以做什么:
- 位域修改
- 溢出控制
c.基本语法:
BITFIELD key [GET type offset] [SET type offset value] [INCRBY type offset increment] [OVERFLOW WRAP|SAT|FAIL]
10、流(Stream)类型:
10.1.Stream简介:
10.2.基本命令理论:
- 1.队列相关指令:
- 2.消费组相关指令:
- 3.四个特殊符号: