Redis(五)新数据类型HyperLoglog与Geospatial
迪丽瓦拉
2024-05-12 07:38:50
0
一、HyperLoglog简介

  Redis HyperLogLog 是用来做基数统计的算法,HyperLogLog的优点是,在输入元素的数量和体积非常非常大时,计算基数所需要的空间总是固定的、并且是很小很小的。

  在Reids里面,每个HyperLogLog键只需要花费12KB内存,就可以计算接近2^64个不同元素的基数,这和计算基数时,元素越多消耗内存就越多的集合形成鲜明对比。

  但是,HyperLogLog只会根据输入元素来计算基数,而不会存储元素本身,所以HyperLogLog不能像集合那样,返回输入的各个元素。

 基数:比如数据集{1,3,5,7,5,7,8},那么这个数据集的基数为{1,3,5,7,8}基数(不重复元素)为5,基数估计就是在误差可接受的范围内,快速计算基数。

二、HyperLoglog常用命令

   pfadd  [elements...] 添加指定元素到HyperLogLog中

127.0.0.1:6379> pfadd progrem mysql php
(integer) 1

  pfcount  [keys...] 计算HLL的近似基数,可以计算多个HLL

127.0.0.1:6379> pfcount progrem
(integer) 4

  pfmerge   [sourcekeys...] 将一个或多个HLL合并后的结果存储在另一个HLL中

127.0.0.1:6379> pfadd k1 a
(integer) 1
127.0.0.1:6379> pfadd k2 b
(integer) 1
127.0.0.1:6379> pfcount k1
(integer) 1
127.0.0.1:6379> pfmerge k3 k1 k2
OK
127.0.0.1:6379> pfcount k3
(integer) 2
三、Geospatial简介

  Redis3.2中增加了对GEO类型的支持,GEO,Geographic,地理信息的缩写,该类型,就是元素的二维坐标,在地图上就是经纬度。redis基于该类型,提供了经纬度设置,查询,范围查询,距离查询,经纬度hash等常见操作。

四、Geospatia常用命令

  geoadd     [longitude,latitude,member...]添加地理位置,(经度,纬度,名称)

  两极无法直接添加,一般会下载城市数据,直接通过java程序一次性导入。

  有效的经度从-180度到180度,有效的纬度从-85.05112878度到85.05112878度

  当坐标位置超出指定范围时,该命令将会返回一个错误。

  已添加的数据是无法再次往里面添加的。

127.0.0.1:6379> geoadd china:city 121.47 31.23 shanghai
(integer) 1
127.0.0.1:6379> geoadd china:city 106.50 29.53 chongqing 114.05 22.52 shenzhen 116.38 39.90 beijing
(integer) 3

  geopos  [member...] 获取指定地区的坐标值

127.0.0.1:6379> geopos china:city shanghai
1) 1) "121.47000163793563843"2) "31.22999903975783553"
127.0.0.1:6379> geopos china:city shenzhen beijing
1) 1) "114.04999762773513794"2) "22.5200000879503861"
2) 1) "116.38000041246414185"2) "39.90000009167092543"

  geodist     [m|km|ft|mi]  获取两个位置之间的直线距离

 单位:m:米【默认值】

           km:千米

           mi:英里

           ft:英尺

127.0.0.1:6379> geodist china:city beijing shanghai
"1068153.5181"
127.0.0.1:6379> geodist china:city beijing shanghai km
"1068.1535"

  georadius    radius  [m|km|mi|ft] 以给定的经纬度为中心,找出某一半径内的元素

127.0.0.1:6379> georadius china:city 110 30 1000 km
1) "chongqing"
2) "shenzhen"

相关内容