redis之四大扩展类型

在上篇文章中,在下给大家简单的说了说什么是redis,并且展示了它五大基础类型的使用方法。没有看过的可以直接传送门https://blog.csdn.net/qq_42673041/article/details/114273181

这次我们书接上回,和大家聊一聊redis更加炫酷的四大扩展类型Geo(位置信息)、Bitmap(位图)、HyperLogLog(基数统计)以及Stream(流)。

6、Geo(位置信息)

    GEO,可以将用户给定的地理位置信息储存起来。名字取自业界通用的地理位置距离排序算法GeoHash,将二 维的经纬度数据映射到一维的整数,也就是挂载到一条线上,方便计算两点之间的距离。实际的内部结构是zset。
原理:
    映射算法,将地球看成一个二维平面,划分成一系列正方形的方格,所有地图坐标都被放置于唯一的方格中,然后进行整数编码(如切蛋糕法),编码越接近的方格距离越近。
 
一般来说,在我们点外卖的时候,根据位置推荐店铺,用的就是以这种方法为基石。只不过更加高级一些罢了。
而它的相关命令有:

1) geoadd + key + 经度 + 维度 + 成员名 通过经纬度存储地址,支持存储多个。

2) geodist + key + member1 + member2 + 距离单位 ​ 查询两个地点之间的相对距离 ​ 距离单位支持:m(米)、km(千米)、mi(英里)、ft(英尺)

​ 3)geopos 查询成员经纬度数据 ​

4)geohash 进行哈希编码 ,得到编码结果

5)georadius 以某个经纬度的位置为中心,划一个指定距离的半径,返回集合中满足条件的地址。 使用方式: georadius + key        +中心的经度 + 中心的纬度 + 半径的距离 + 半径的单位 ​ 可选参数: withdist 返回距离; withcoord 返回经纬度 ; withhash            返回哈希编码;

7、bitmap(位图)

    BitMap 就是一个byte数组,元素中每一个 bit 位用来表示元素在当前节点对应的状态,实际上底层也是通过对 字符串的操作来实现,对应开发中boolean类型数据的存取。
原理:
    位数组是自动扩展的,可以直接得到字符串的ascii码,是为整存零取,也可以零存零取或零存整取。如果对应 的字节是不可打印字符,会显示该字符的十六进制。
 
命令:

1)读取操作 setbit key index 0/1 设置某个位置的值为 0 / 1 getbit key index 获取某个位置的值 get + key 零存整取,直接获得二进制字符数组对应的字符串。

2) 统计操作 ​ bitcount 查询数组中有多少个1 ​ 支持参数 字符的起始位置到终止位置 , 可以计算每个字符的二进制有多少个1

8、HyperLogLog(基数统计)

Redis 的基数统计,这个结构可以非常省内存的去统计各种计数。它是一个基于基数估算的算法,但并不绝对准 确,标准误差是0.81% 。HyperLogLog数据结构的发明人是Philippe Flajolet,pf是名字首字母缩写。
原理:
HyperLogLog最大占用12KB的存储空间。当计数比较小时,使用稀疏矩阵存储,占用空间很小,在变大到超过 阈值时,会转变成稠密矩阵,占用12KB。
算法:给定一系列的随机整数,记录低位连续0位的最大长度k,通过k可以估算出随机数的数量N。
 
1) 基础命令 ​ pfadd 增加数据 ​ pfcount 统计数据 (去重)
 

9、Stream(流)

 

发布/订阅模式

Stream是Redi s 5.0引入的一种新数据类型,允许消费者等待生产者发送的新数据,还引入了消费者组概念,组之间数 据是相同的(前提是设置的偏移量一样),组内的消费者不会拿到相同数据。这种概念和kafka很雷同。
原理:
与redis的发布/订阅不同,pub/ sub多个客户端是收到相同的数据,而stream的多个客户端是竞争关系,每个客户端收 到的数据是不相同的。
读取消息的命令: ​
1)xread 读取消息,返回消息列表 ​ eg: xread + streams + key + 0-0 遍历读取所有的消息 ​
    支持参数count + num,指定返回消息的数量 ​
    支持参数block + num, 可以阻塞等待消息的返回,此时0-0 应该替换为“$”,代表从尾部接收
 
ok,至此在下已经把redis所有数据类型介绍完了,以后当有人问起redis有哪些数据类型的时候,别说只知道一个String哦。
后面,近期还会分享一些redis的配置、持久化、策略模式的一些内容,有兴趣的话可会在主页翻一翻。 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值