七天玩转Redis | Day3 Redis地理位置基数统计位图场景使用详解
Posted diviner_s
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了七天玩转Redis | Day3 Redis地理位置基数统计位图场景使用详解相关的知识,希望对你有一定的参考价值。
文章目录
Redis之Gaospatial地理位置
国内城市经纬度在线查询工具http://www.jsons.cn/lngcode/
我们如果在Redis中查询位置,则需要先在数据库中输入该坐标。
添加一个或多个地理位置的坐标
我们使用GEOADD指令来添加地理位置坐标
语法:GEOADD key longitude latitude member [longitude latitude member ...]
- key表示地理位置的索引
- longitude表示该位置的经度
- latitude表示该位置的纬度
- member表示地名
我们以输入郑州经纬度为例
因为郑州是中国的城市,因此我们可以定义深圳的索引key为“china:city”。
注意:Gaospatial地理位置中,多个城市可以使用同一个key。查询地址时可以通过索引+地名的形式查询。
查询一个或多个地理位置坐标
语法:GEOPOS key member [member ...]
有则返回经纬度,没有则返回null。
查询两地之间的距离
语法:GEODIST key member1 member2 [unit]
- member1为第一个位置名称
- member2为第二个位置名称
- [unit]为显示的单位,可以是m(米,默认)、km(千米)、ft(英尺)、mi(英里)
以坐标为中心来范围搜索地理位置
语法:GEORADIUS key longitude latitude radius m|km|ft|mi [WITHCOORD] [WITHDIST] [WITHHASH] [COUNT count] [ASC|DESC]
- key为要查询的地理位置的索引
- longitude为该地理位置的经度
- latitude为该地理位置的纬度
- radius表示要查询的半径
- m|km|ft|mi表示单位
- [WITHCOORD]可选,表示是否输出经纬度
- [WITHDIST]可选,表示是否输出距离
- [WITHHASH]可选,表示是否输出哈希值
- [COUNT count]可选,表示输出几个数据
- [ASC|DESC]可选,表示按照距离升序还是降序排列,ASC升序,DESC降序
以位置为中心来范围搜索地理位置
语法:GEORADIUSBYMEMBER key member radius m|km|ft|mi [WITHCOORD] [WITHDIST] [WITHHASH] [COUNT count] [ASC|DESC]
- key为要查询的地理位置的索引
- member为要作为中心点的地理位置
- radius表示要查询的半径
- m|km|ft|mi表示单位
- [WITHCOORD]可选,表示是否输出经纬度
- [WITHDIST]可选,表示是否输出距离
- [WITHHASH]可选,表示是否输出哈希值
- [COUNT count]可选,表示输出几个数据
- [ASC|DESC]可选,表示按照距离升序还是降序排列,ASC升序,DESC降序
Redis之HyperLoglog基数统计
Redis 经常使用的数据类型有字符串、列表、散列、集合和有序集合,但这些类型并不能满足所有的应用场景,因此,Redis 的后续版本不断的扩增其他数据类型来增强 Redis 适用能力。在 Redis 2.8.9 版本中新增了 HyperLogLog 类型。
HyperLoglog采用了基数估计算法,所以它得到的结果一定会存在误差(标准误差为0.81%),适用于海量数据的计算与统计,特点是占用空间小,计算速度快。
基数计算(cardinality counting)指的是统计一批数据中的去掉重复元素后数据的个数。比如集合 1,2,3,1,2 ,它的基数集合为 1,2,3 ,所以基数为 3。HyperLogLog 正是通过基数估计算法来统计输入元素的基数。
HyperLoglog 不会存储元素值本身,只能统计数量。
添加指定元素
语法:PFADD key element [element ...]
- key为数据集的索引
- element为数据集中的数据
创建三个数据集,索引分别为mynum1,mynum2,mynum3:
统计数据集的基数估算值
语法:PFCOUNT key [key ...]
注意,数据集中的重复元素是需要去掉统计的。
合并数据集
语法:PFMERGE destkey sourcekey [sourcekey ...]
- destkey为要合并到的数据集的名称
- sourcekey为要合并的数据集的索引
比如我们将“mynum1”和“mynum2”合并并集为“mynum4”,再求“mynum4”的基数,得到13,是因为其中的f和g重复。
Redis之Bitmap位图场景
Bitmap位图是通过二进制实现的,其中存储的数据要么是0,要么是1,ep:0,1,1,0,1,0,0。而且位图中每一个数据都是有唯一的一个下标对应的,与数组类似。
由于位图的数据存储是由0,1存储,因此我们可以应用于统计用户签到次数,上班打卡次数,只要是事件可以通过0|1表示的都可以使用Bitmap表示。
Bitmap同样属于string数据类型。在Redis中一个字符串类型的值最多能存储512MB的内容,每个字符串由多个字节组成,每个字节由8个Bit位组成,因此Bitmap的存储上限为
2
32
2^32
232。
输入位图数据集
用来设置或者清除某一位上的值,其返回值是原来位上存储的值。key 在初始状态下所有的位都为 0 。
语法:SETBIT key offset value
- key为该数据集的索引
- offset为要输入的数据的下标
- value为要输入的数据,0或1
统计“1”的个数
语法:BITCOUNT key [start end]
- key表示位图数据集的索引
- [start end]表示开始和结束的下标,默认不写就是统计数据集中所有数据
获取指定位置的值
语法:GETBIT key offset
- key为该数据集的索引
- offset为要输入的数据的下标
以上是关于七天玩转Redis | Day3 Redis地理位置基数统计位图场景使用详解的主要内容,如果未能解决你的问题,请参考以下文章
七天玩转Redis | Day3 Redis地理位置基数统计位图场景使用详解
七天玩转Redis | Day3Redis地理位置基数统计位图场景使用详解
七天玩转Redis | Day3Redis地理位置基数统计位图场景使用详解