redis的Bitmap、HyperLogLog、Geospatial

目录

Bitmap(针对位操作字符串)

简介

操作:

HyperLogLog(针对基数)

简介

指令操作

Geospatial(针对地理经纬度)

简介

指令操作


Bitmap(针对位操作字符串)

简介

现代计算机用二进制(位)作为信息的基础单位,1 个字节等于8位,例如"abc"字符串是由3个字节组成,但实际在计算机存储时将其用二进制表示,"abc" 分别对应的ASCII码分别是97、98、 99 ,对应的二进制分别是01100001、01100010和01100011 ,如下图

 合理地使用操作位能够有效地提高内存使用率和开发效率。java中位与操作是最快的,在Redis中同样道理,(实际上是字符串)Redis提供了Bitmaps这个“数据类型”可以实现对位的操作: 。
( 1 ) Bitmaps本身不是一 种数据类型,实际上它就是字符串( key-value ),但是它可以对字符串的位进行操作。。
(2) Bitmaps单独提供了一套命令,所以在Redis中使用Bitmaps和使用字符串的方法不太相同。可以把 Bitmaps想象成一个以位为单位的数组 ,数组的每个元只能存储0和1,数组的下标在Bitmaps中叫做偏移量。

 操作:

setbit <key> <offset>设置对应KEY值的偏移量的值

 但是如果偏移量过大,会造成空间的浪费,更重要是如果是在初始化阶段偏移量过大,这个初始化执行会非常慢,还会造成阻塞。

getbit <key><offset>获取对应KEY值的偏移量的值

bitcount <key><offset>[start][end] 不设值start和end默认统计所有,统计指定第star字节t到end字节内值为1的索引的数量,

比如 0 1就是统计0 到 15的索引 ,1字节8位

 bittop and (or/not/xor) <destkey> [key...]

bitop是一个复合操作,它可以做多个Bitmaps的and(交集)、or(集)、not(非)、xor(异或)操作并将结果保存在destkey中。当数据量大的时候适合使用,数据量小的时候可能还不如 set节省空间

HyperLogLog(针对基数)

简介

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

基数就是比如说元素集{1 ,2 ,2 ,3 ,4 ,4 , 4} 其基数为 1 2 3 4,有4个基数。

指令操作

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

 将所有元素添加到指定HyperLogLog数据结构中。如果执行命令后HLL估计的近似基数发生变化,则返回1,否则返回0。。

pfcount<key> [key ..]计算HLL的近似基数,可以计算多个HLL ,比如用HLL存储每天的UV ,计算一周的UV可以使用7天的UV合并计算即可
 

 pfmerge<destkey> <sourcekey> [sourcekey ..]将一个或多 个HLL合并后的结果存储在另一个HLL中,比如每月活跃用户可以使用每天的活跃用户来给并计算可得

Geospatial(针对地理经纬度)

简介

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

指令操作

1、geoadd<key> < longitude> <latitude> <member> [longitude latitude member..]添加地理位置(经度,纬度,名称)。

两极无法直接添加,一般会下载城市数据,直接通过Java程序-次性导入。 
有效的经度从-180 度到180 度。有效的纬度从-85.05112878 度到85.05112878度。当坐标位置超出指定范围时,该命令将会返回一个错误。已经添加的数据,是无法再次往里面添加的。

2、geopos <key><name> 获取制定城市的坐标

3、geodist <key> <member1> <member2> [m]|km|ft|mi ]获取两个位置 之间的直线距离,不指定单位参数,默认用米 

 4、georadius <key>< longitude> <latitude>radius m|km|ft|mi 以给定的经纬度为中心 ,找出某一半径内的元素。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值