五、Redis扩展类型

geo

Redis GEO 主要用于存储地理位置信息,并对存储的信息进行操作,该功能在 Redis 3.2 版本新增。

  • geoadd:添加地理位置的坐标。

    127.0.0.1:6379> geoadd city 106.685727 26.628318 guiyan 105.296731 27.317069 bejie  104.836799 26.641236 liupanshui  102.868288 24.917242 kunming
    
  • geopos:获取地理位置的坐标。

    ​ 于从给定的 key 里返回所有指定名称(member)的位置(经度和纬度),不存在的返回 nil。

    语法格式如下:

    GEOPOS key member [member ...]
    
    127.0.0.1:6379> geopos city kunming
    102.86828666925430298
    24.91724304104910459
    
  • geodist:

    计算两个位置之间的距离。

    geodist 语法格式如下:

    GEODIST key member1 member2 [m|km|ft|mi]
    

    ​ member1 member2 为两个地理位置。最后一个距离单位参数说明:m :米,默认单位。km :千米。mi :英里。ft :英尺。

    127.0.0.1:6379> geodist city kunming guiyan km
    427.0749
    
  • georadius:根据用户给定的经纬度坐标来获取指定范围内的地理位置集合。

    georadius 以给定的经纬度为中心, 返回键包含的位置元素当中, 与中心的距离不超过给定最大距离的所有位置元素。最后一个距离单位参数说明:m :米,默认单位。km :千米。mi :英里。ft :英尺。

    127.0.0.1:6379> georadius city 104.845998 26.632969 200 km
    liupanshui
    bejie
    guiyan
    
  • georadiusbymember:根据储存在位置集合里面的某个地点获取指定范围内的地理位置集合。

    127.0.0.1:6379> georadiusbymember city guiyan 200 km withcoord withdist
    liupanshui
    183.8303
    104.83679741621017456
    26.64123617229464713
    bejie
    157.5621
    105.29673188924789429
    27.31706887500919123
    guiyan
    0.0000
    106.68572455644607544
    26.62831923326665873
    

    georadiusbymember参数说明:

    1.距离单位:m :米,默认单位。km :千米。mi :英里。ft :英尺。

    2.WITHDIST: 在返回位置元素的同时, 将位置元素与中心之间的距离也一并返回。

    3.WITHCOORD: 将位置元素的经度和维度也一并返回。

    4.WITHHASH: 以 52 位有符号整数的形式, 返回位置元素经过原始 geohash 编码的有序集合分值。 这个选项主要用于底层应用或者调试, 实际中的作用并不大。

    5.COUNT 限定返回的记录数。

    6.ASC: 查找结果根据距离从近到远排序。

    7.DESC: 查找结果根据从远到近排序。

  • geohash:返回一个或多个位置对象的 geohash 值。

bitmp

​ BitMap 原本的含义是用一个比特位来映射某个元素的状态。由于一个比特位只能表示 0 和 1 两种状态,所以 BitMap 能映射的状态有限,但是使用比特位的优势是能大量的节省内存空间。

​ 在 Redis 中,可以把 Bitmaps 想象成一个以比特位为单位的数组,数组的每个单元只能存储0和1,数组的下标在 Bitmaps 中叫做偏移量。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NFEnBICB-1606466817762)(Redis%E4%BA%94%E5%A4%A7%E6%95%B0%E6%8D%AE.assets/4150f4f89ffe1d9f2d58b5d31baaf96c.png)]

打卡案例

//添加数据 
127.0.0.1:6379> setbit sing 1 1
0
127.0.0.1:6379> setbit sing 2 1
0
127.0.0.1:6379> setbit sing 3 1
0
127.0.0.1:6379> setbit sing 4 1
0
127.0.0.1:6379> setbit sing 5 1
0
127.0.0.1:6379> setbit sing 6 0
0
127.0.0.1:6379> setbit sing 7 0
//查看某一天打卡情况
0
127.0.0.1:6379> getbit sing 7
0
//查看value为1的总长度
127.0.0.1:6379> bitcount sing 
5


Hyperloglog

什么是基数?

A {1,3,5,7,8,7}

B{1,3,5,7,8}

基数(不重复的元素) = 5,可以接受误差!

简介

​ Redis 2.8.9 版本就更新了 Hyperloglog 数据结构!Redis Hyperloglog 基数统计的算法!优点:占用的内存是固定,2^64 不同的元素的技术,只需要废 12KB内存!如果要从内存角度来比较的话 Hyperloglog 首选!网页的 UV (一个人访问一个网站多次,但是还是算作一个人!)

​ 传统的方式, set 保存用户的id,然后就可以统计 set 中的元素数量作为标准判断 !

这个方式如果保存大量的用户id,就会比较麻烦!我们的目的是为了计数,而不是保存用户id;

0.81% 错误率! 统计UV任务,可以忽略不计的!

127.0.0.1:6379> PFadd mykey a b c d e f g h i j # 创建第一组元素 
mykey (integer) 1
 127.0.0.1:6379> PFCOUNT mykey # 统计 mykey 元素的基数数量 (integer) 10 
 127.0.0.1:6379> PFadd mykey2 i j z x c v b n m # 创建第二组元素 mykey2 (integer) 1 
 127.0.0.1:6379> PFCOUNT mykey2 (integer) 9
 127.0.0.1:6379> PFMERGE mykey3 mykey mykey2 # 合并两组 mykey mykey2 => mykey3 并集 OK127.0.0.1:6379> PFCOUNT mykey3 # 看并集的数量! (integer) 15

​ 如果允许容错,那么一定可以使用 Hyperloglog !如果不允许容错,就使用 set 或者自己的数据类型即可

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值