Redis之三大特殊数据类型相关知识(Geospatial地理位置、Hyperloglog基数、Bitmaps位存储)

一、Geospatial地理位置

1、介绍

Redis 地理空间索引允许存储坐标并搜索它们。 此数据结构可用于查找给定半径或边界框内的邻近点。

2、相关shell命令

2.1 规则

两级无法直接添加,一般会下载城市数据,直接通过java程序一次性导入
参数:key
值:纬度、经度、名称
有效的经度:-180度到180度
有效的纬度:-85.05112878度到85.05112878度

2.2 geoadd命令(给城市赋值)

给城市赋值(经纬度)

geoadd china:city 经度 纬度 城市名

例如

geoadd china:city 116.40 39.90 beijing

2.3 geopos命令(获取指定城市的经度和纬度)

获得当前定位(一定是个真正存在的坐标值)

geopos china:city 城市名1 城市名2

例如

geopos china:city beijing shanghai

2.4 geodist命令(获取两个城市之间的距离)

计算两点之间的距离
单位:
m表示单位为米
km表示单位为千米
mi表示单位为英里
ft表示单位为英尺

geodist china:city 城市名1 城市名2 km

例如
查看上海到北京的直线距离

geodist china:city beijing shanghai km

2.5 georadius命令(以给定的经纬度为中心,找出某一半径内的元素)

georadius china:city 经度 纬度 距离值 km

(1)以110,30这个经纬度为中心,寻找方圆1000km内的城市

georadius china:city 110 30 1000 km

(2)显示到中心距离的位置(withdist)

georadius china:city 110 30 1000 km withdist

(3)显示他人的定位信息(withcoord)

georadius china:city 110 30 1000 km withcoord

(4)筛选出指定位置的结果(withcoord count 1)

georadius china:city 110 30 1000 km withcoord count 1

2.6 georadiusbymember

找出位于指定元素周围的其他元素

georadiusbymember china:city 城市名 1000 km

例如

georadiusbymember china:city beijing 1000 km

2.7 geohash命令

返回11个字符的Geohash字符串
将二维的经纬度转换为一维的字符串,如果两个字符串越接近,那么距离越近。

geohash china:city 城市名

例如

geohash china:city beijing

3、注意

GEO底层的实现原理其实就是Zset,我们可以使用Zset命令来操作geo
(1)查看地图中全部的元素

zrange china:city 0 -1

(2)移除指定元素

zrem china:city beijing

二、Hyperloglog基数存储

1、基数

基数指(不重复的元素)= 5 ,可以接受误差
例如:A{1,3,5,7,8}

2、简介

Redis Hyperloglog基数统计的算法
优点:占用的内存是固定的,2^64个不同的元素的技术,只需要12KB内存

3、相关shell命令

3.1 创建一组元素

pfadd key值 a b c d e f g

例如

pfadd mykey a b c d e f g

3.2 统计mykey元素的基数数量

pfcount key值

结果

pfcount mykey

3.3 合并两组数据

pfmerge key值3 key值1 key值2

例如

pfmerge mykey3 mykey mykey2

4、注意

如果允许容错,就可以使用Hyperloglog,
如果不允许容错,就使用set或其他数据类型。

三、Bitmaps位存储

1、介绍

统计用户信息,活跃、不活跃!登录、未登录!打卡等等都可以使用Bitmaps
Bitmaps位图,数据结构,都是操作二进制位来进行记录,就只有0和1两个状态。
365天 = 365bit 1字节=8bit 46个字节左右

2、相关shell命令

2.1 对位图赋值

setbit 对象 某个属性 对应含义

例如
星期一标号为0
赋值为1,代表打卡,赋值为0,代表未打卡
如下:
星期一打卡了,赋值为1
星期二未打卡,赋值为0
星期三未打卡,赋值为0
星期四打卡了,赋值为1

setbit day 0 1
setbit day 1 0
setbit day 2 0
setbit day 3 1

2.2 查看是否打卡

getbit day 2

2.3 统计打卡天数

bitcount day

猜你喜欢

转载自blog.csdn.net/qq_46106857/article/details/128307322
今日推荐