Redis之Gaospatial地理位置Redis之HyperLoglog基数统计Redis之Bitmap位图场景
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重复。
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为要输入的数据的下标



