Redis(五)新数据类型HyperLoglog与Geospatial

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6
一、HyperLoglog简介

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

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

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

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

二、HyperLoglog常用命令

   pfadd <key> <element>[elements...] 添加指定元素到HyperLogLog中

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

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

127.0.0.1:6379> pfcount progrem
(integer) 4

  pfmerge <destkey> <sourcekey> [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 <key> <longitude> <latitude> <member> [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 <key> <member>[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 <key> <member1> <member2>  [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 <key> <longitude> <latitude> radius  [m|km|mi|ft] 以给定的经纬度为中心找出某一半径内的元素

127.0.0.1:6379> georadius china:city 110 30 1000 km
1) "chongqing"
2) "shenzhen"
阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6
标签: redis