redis三种特殊的数据结构
前言
我们学习完redis的常用五种数据类型,其实就已经能满足日常的开发需求了,也就是说我们已经redis入门。但是我们不仅仅要学会redis,还要学精redis。所以说今天我们来学习下redis的三种特殊的数据类型。
一、geospatial地理位置
Redis的geo查询地理位置。可以推算地址位置的信息。
而且geo查询非常简单,只有六个命令。
geoadd 添加地址位置
规则:两级的数据是无法添加的,我们一般是下载数据,利用程序一次导入
有效的经度是从-180到180,有效的纬度是从-85.05112778到85.05112778,超过范围则会报错
key:(维度、经度、名称)
geoadd key longitude(纬度) latitude(经度) member[longitude(经度) latitude(纬度) member...]
geodist 返回两个给定位置之间的距离
单位 : m米 km千米 mi英里 ft英尺
geodist key member1 member2 [unit](单位,默认是m)
geohash 返回一个或多个未知元素的geohash表示
返回11个字符串的geohash字符串
将二维的经纬度转换为一维的字符串,两个字符串越接近,距离越近、
geohash key member[member...]
geopos 获取一个或多个城市的经纬度
geopos key member[member...]
georadius 以给定的经纬度为中心,找出某一半径内的元素
附近的人:通过半径来查询所有人的定位
georadius key longitude latitude radis m|km|ft|mi [withcoord](经纬度) [withdist](直线距离) [count 1](只查询一个)
georadiusbymember 找出位于指定范围内的元素,中心点是由给定的位置元素决定
georadiusbymember key longitude latitude radis m|km|ft|mi [withcoord](经纬度) [withdist](直线距离) [count 1](只查询一个)
geo的底层原理其实就是Zset,所以我们可以通过zset命令来操作geo,例如
zrem key member[member...] 移除城市信息
二、hyperloglog基数
基数介绍:不重复的元素,可以接受误差。
redis hyperloglog 是一种基数统计的算法。
优点:占用的内存是固定的,2的64次方不同的元素存储,只需要耗费12kb的内存。从内存角度来比较,hyperloglog是首选。
应用: 网页的UV(一个人访问网站多次,但还是算作一个人)
传统的方式是使用set保存用户的id,然后统计set集合中的元素的个数作为标准判断。
redis hyperloglog 算法只有0.81%的错误率 统计网页UV任务,是可以忽略不计的
pfadd key element[element...] 创建一组元素
pfcount key[key...] 统计元素的基数数量
pfmerge destkey sourcekey[sourcekey...] 合并两组(不含重复值,并集)
二、bitmap位存储
应用:用户状态(活跃、不活跃),登录状态(登录、未登录) 等两个状态的,都可以使用bitmaps。
bitmap位图,是一种数据结构。
setbit key offset(当前位) value(状态) 设置某位的状态
getbit key offset 查看某个位置的状态
bitcount key [start stop] 统计某种状态的数量