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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

熊凯瑞

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值