美文网首页
redis数据结构

redis数据结构

作者: 温岭夹糕 | 来源:发表于2024-08-16 10:55 被阅读0次

目录

链接地址

数据结构回顾

image.png

redis除了上面基础5种,还有三种扩展数据结构:

  • bitmap :实际上底层就是用sds保存二进制数字
  • hyperloglog
  • geo

1.GEO

geo(redis3.2以上)的使用场景常用于存储地址的经纬度,底层数据结构为zset,即有序集合sorted set来实现,key存储元素信息,value存储经纬度信息(权重分数),支持按经纬度排序,按范围查找
以添加车辆位置为例,伪代码如下

zadd car:location  车辆ID  经纬度

那么问题来了,经纬度是一组浮点数,包含两个值,显然zadd是无法完成的

116.03   ,  39.02

所以就在zset上面扩展出了geo

geoadd cars:location  116.03 39.02

1.1GEOhash编码

为了能高效比较经纬度,redis使用了geohash编码,原理就是二分区间,区间编码(先对经度和维度分别编码,然后再各自组合成一个最终编码)
对于一个地理位置,经度范围为[-180,180],该编码会对该范围做N次(N可自定义)的二分区间,最终形成一个二进制值:

  • 第一次二分区:经度被划分[-180,0)和(0,180]两个左右半区,如果地址在左半区就用0表示,反之则1表示,这样就得到一位编码值
  • 同理重复上面操作N次,就得到一个长度为Nbit的二进制值
  • 维度编码也是如此
  • 最终组合在一起,组合规则是:偶数上(0开始)依次是经度的编码值,奇数(1开始)是纬度编码值


    image.png

那么一块区域的二进制编码值不就完成了(zset就可以保存了)
那么查询附件位置的车辆信息就变成了“查询二进制值(权重)等于该区域的车辆”问题了
在线体验geo

相关文章

网友评论

      本文标题:redis数据结构

      本文链接:https://www.haomeiwen.com/subject/aerykjtx.html