Redis的特殊类型
- geospatial地理位置类型
- geoadd
- geopos
- geodist
- georadius
- GEORADIUSBYMEMBER
- GEOHASH
- 小结
- hypeloglog基数类型
- 命令
- 注意
- Bitmaps类型
geospatial地理位置类型
前言:Redis的Geo,在Redis3.2版本就已经推出了,一共只有六个命令,可以使用它来进行定位、测试距离等功能。
地区的经纬度可以在百度上查找
https://jingweidu.bmcx.com/
geoadd
参数:geoadd key 维度 经度
添加地理位置
#规则:两极是无法直接添加的,我们一般会下载城市数据,直接通过java程序一次性导入!
#参数:geoadd key 维度 经度
geoadd china:city 116.2 40.2 beijing
geoadd china:city 121.47 31.23 shanghai
geoadd china:city 106.50 29.53 chongqi
geoadd china:city 114.05 22.52 shenzhen
(可以通过java程序一次性输入)
geoadd china:city 108.96 34.26 xian
注意:
geopos
geopos
GEOPOS china:city beijing #获取指定城市的经度和维度
GEOPOS china:city beijing chongqi #返回两个城市
geodist
geodist #查询两者之间的距离,肯定会有误差的
GEODIST china:city beijing shanghai
GEODIST china:city beijing shanghai km 以km作为单位
georadius
georadius以给定的经纬度为中心, 返回键包含的位置元素当中, 与中心的距离不超过给定最大距离的所有位置元素。
GEORADIUS china:city 110 30 1000 km 以110和30为经纬度中心,查询1000km为半径内的所有城市
GEORADIUS china:city 110 30 1000 km withdist/withcoord count 1 #以110、30为经度和维度作为中心,1000km为半径内的所有key的值都显示出来,并附带其参数,count 后面带的数字可以指定要返回的数量
GEORADIUSBYMEMBER
这个命令和 GEORADIUS 命令一样, 都可以找出位于指定范围内的元素, 但是 GEORADIUSBYMEMBER 的中心点是由给定的位置元素决定的, 而不是像 GEORADIUS 那样, 使用输入的经度和纬度来决定中心点
指定成员的位置被用作查询的中心。
GEORADIUSBYMEMBER china:city beijing 1000km
1)beijing
2) xian
GEOHASH
这个用处不大,了解即可
其实就是把二维的经纬度转换成字符串
geohash china:city beijing chongqi 字符串越长越精确
小结
GEO底层的实现原理其实就是Zset!我们可以使用Zset命令来操作geo
hypeloglog基数类型
前言:
Redis2.8.9版本就更新了Hpyeloglog数据结构,基于算法
那么什么是基数?
A{1,3,5,7,8,9,7} B{1,3,5,7,9}
基数:不重复的元素 = 5,可以接受误差
为什么要用hypeloglog?
Redis Hypeloglog基数统计的算法!
网页的UV( 一个人访问一个网站多次,但是还是算作一个人)
传统的方式,set保存用户的id,然后就可以统计set中的元素数量作为标准判断!
这个方式如果保存大量的用户id,就会比较麻烦,消耗大量的内存取保存id,我们的目的是为了计数,而不是保存用户id;
优点:内存占用十分小,如果要从内存角度来比较的话,因此Hpyeloglog首选
命令
PFadd mykey A B C D E F G H #创建第一组元素
PFCOUNT mykey #统计第一组元素的基数数量
PFadd mykey2 C D T H R R#创建第二组元素
PFMERGE mykey3 mykey mykey2 #合并两组mykey和mykey2 => mykey3 并集
注意
Hpyeloglog是有可能会出错的,但是它的优点是内存十分的小,如果不允许出错,那就用自己的方式来存储
Bitmaps类型
前言:Bitmaps是redis的位存储
为什么要用呢?下面介绍一个案例
统计疫情感染人数:0 1 0 0 0 ,感染用1,其他用0、
b站活跃和不活跃,登录和未登录,打卡
两个状态的都可以使用Bitmaps
Bitmaps位图,数据结构!都是操作二进制位来记录,就只有0和1两个状态!
365天= 365bit 1个字节=8bit ,46个字节就可以存储365天的状态了
查看某一天是否有打卡!
统计操作,统计这周打卡的天数,就可以看到是否有全勤: