Redis三种特殊数据类型
1.Geospatial地理位置详解
应用:朋友圈定位、打车等应用,可以推算地理位置的信息,两地之间的距离
命令如下:
geoadd :添加地理位置
添加城市数据(城市名称和经纬度,一般直接通过java程序一次性导入),注意有效的经度在-180度到180度(E),有效的维度在0-90度之间(N)。
当你需要找城市时:
GEOPOS : 获取城市的经纬度,得到定位,一定是一个坐标值
GEODIST :返回两个给定位置之间的距离
给出单位表(单位声明在两个地方的后面)
m | 单位:米 |
km | 单位:千米 |
mi | 单位:英里 |
ft | 单位:英尺 |
GEORADIUS:
GEORADIUS china:city 110 30 1000 km 以110 30 这个经纬度为中心,寻找方圆1000km的城市
GEORADIUS china:city 110 30 500 km withdist
显示找到的地方到中心距离的位置
GEORADIUS china:city 110 30 500km withcoord:显示找到的地方的经纬度(定位)
GEORADIUS china:city 110 30 500 km withcoord withdist count 1(筛选出指定的结果)
GEORADIUBYMEMBER: 找出位于指定位置周围的内容
GEOHASH命令 :返回一个或多个位置元素表示,将二维的经纬度转为一维的字符串(字符串越接近则两个地方距离越近)
GEO实现原理就ZSET ,可以使用Zset 命令来操作GEO
比如ZRANGE 查看所有元素
Zrem 删除某个元素
2.Hyperloglog
什么是基数?
A(1,3,5,7,8,7) B(1, 3,5,7,8)基数就是去重后的个数,这里基数是5
Hyperloglog就是基数统计的算法,内存固定,占的内存很小,只需要费12KB的内存(如果用set很占内存)。
PFADD 创建一组元素
PFCOUNT mykey :统计mykey中的基数数量
PFMERGE mykey3 mykey mykey2 :将mykey和mykey2融合到mykey3中
3.Bitmap(位存储)
应用:可以用来统计用户信息(一般只有两个状态的都可以使用,比如登陆,未登录),都是操作二进制位来记录
只有 “0”和“1”的两个状态。
记录周一到周日的打卡(数的安排从0-6)
周一 : 1 (打卡);周二:0(未打卡)
查看某一天是否有打卡,用getbit
可以统计打卡的天数: