Redis三种特殊数据类型
1、geospatial地理位置
该功能可以推算地理位置信息,两地之间的距离
只有6个命令:
GEOADD
添加地理位置,可通过java直接导入!
参数 key 值(经度 纬度 名称)
geoadd china:city 116.40 39.90 beijin
geoadd china:city 121.47 31.23 shanghai
geoadd china:city 160.50 29.53 chongqing 114.05 22.52 shenzhen
geoadd china:city 120.16 30.24 hangzhou 108.96 34.26 xian
GEOPOS
获取指定城市的经度和纬度
geopos china:city beijin
1) 1) "116.39999896287918091"
2) "39.90000009167092543"
GEODIST
获取两个目标间的距离
单位: m km mi ft
GEODIST china:city beijin shanghai km
"1067.3788"
GEORADIUS
GEORADIUS china:city 110 30 500 km 以110 30为经纬度查询,方圆500km的目标
1) "xian"
GEORADIUS china:city 110 30 500 km withdist 距离
1) 1) "xian"
2) "483.8340"
GEORADIUS china:city 110 30 500 km withcoord 经纬度
1) 1) "xian"
2) 1) "108.96000176668167114"
2) "34.25999964418929977"
GEORADIUS china:city 110 30 500 km withcoord withdist count 3
查出距离、经纬度、限定三个最近的目标
GEOHASH
返回一个或多个位置元素
将二位的经纬度转化为一维的字符串
GEOHASH china:city beijin xian
1) "wx4fbxxfke0"
2) "wqj6zky6bn0"
GEORADIUSBYMEMBER
找出位于指定元素周围的其他元素
城市之间的定位
GEORADIUSBYMEMBER china:city beijin 1000 km withcoord withdist
1) 1) "beijin"
2) "0.0000"
3) 1) "116.39999896287918091"
2) "39.90000009167092543"
2) 1) "xian"
2) "910.0565"
3) 1) "108.96000176668167114"
2) "34.25999964418929977"
底层原理
底层实现原理为Zset可以使用Zset
zrange china:city 0 -1 查看所有元素
1) "xian"
2) "shenzhen"
3) "hangzhou"
4) "shanghai"
5) "beijin"
6) "chongqing"
可以使用 zrem china:city beijin 去消除定位信息
2、Hyperloglog
基数:不重复的元素;基数统计算法
优点:占用内存固定
可应用于网页的UV(单人访问多次仍为单人)
pfadd mykey a b c d e f g 创建第一组元素
pccount mykey 统计mykey元素的基数数量
pfmerge mykey3(目的set) mykey mykey2 合并两组mykey和mykey2 => mykey3 并集
允许容错可以使用,不允许–>set
3、Bitmaps
位存储==>统计用户信息,活跃、不活跃、登录、未登录、打卡, 365打卡
setbit key offset value offset==>目标的地址
setbit a 0 1 ==>存入bitmaps
getbit a 0 ==>查看0地址上有没有至1
bitcount a ==>查看key中至1总数