Redis系列文章------5.三种特殊数据类型:geospatial、hyperloglog、bitmap

原创:兜里的猫

本章目录

  • geospatial
  • hyperloglog
  • bitmap

1. geospatial(地理位置)

可以查询一些测试数据:http://www.jsons.cn/lngcode/

朋友的定位,附近的人,打车距离的计算?

Redis的Geo在redis 3.2就推出了,我这边用的是3.2.12版本!这个功能可以推算出地理位置的信息,两地之间的距离,方圆几里的人。

相关命令(只有6个):

1.geoadd

2.geodist

3.geohash

4.geopos

5.georadius

6.georadiusbymember

==geoadd:添加地理位置(value为(经度,维度,名称))==

规则:南北极无法直接添加,一般会下载城市数据,通过java程序一次导入!

geoadd
geoadd

==geopos:获取指定城市的经度纬度==

获取当前定位:一定是一个坐标值!

geoadd
geoadd

==geodist:返回两个给定位置之间的距离==

两人之间的距离!

单位:m(默认为米)、km(千米)、mi(英里)、ft(英尺)

geoadd
geoadd

==georadius:以给定的经纬度为中心,找出某一半径内的元素==

前提是:所有的数据都应该录入china:city这个key中

我附近的人(获取所有附近的人的地址,定位),通过半径来查询!可以获取指定数量的人(距离近的先输出)

geoadd
geoadd

==georadiusbymember:获取位于指定元素周围的其他元素==

geoadd
geoadd

==geohash:返回一个或多个位置元素的geohash表示==

将二维的经纬度转换为一维的字符串,如果两个字符串越相似,则距离越接近!

可用于判断是否是同一个区域!

geoadd
geoadd

小结:

geo底层的实现原理其实就是Zset,我们可以使用Zset命令来操作geo!
geoadd
geoadd

2. hyperloglog(基数统计算法)

简介:

Redis2.8.9版本就更新 了Hyperloglog数据结构,
Hyperloglog是Redis基数统计的算法。

优点:占用固定的内存,2^64不同的元素的技术,只需要占用12KB内存,如果要从内存角度来讲的话,Hyperloglog是首选!

什么是基数:

两个集合:A{1,2,3,4,5,5}    B{1,2,3,4,5,6}

则两个集合的基数(不重复的元素)= 6,可以接受误差!

用途:

例如:网站的UV访问量的统计(同一个人访问一个网站多次,还算做一个人的访问)

传统的方式,是使用set集合保存用户id,因为set集合是不可重复的,然后就可以统计set集合中的元素数量作为标准判断!

这个方式如果存入大量的用户id,就会比较麻烦。我们的目的是为了统计数量,而不是保存用户id!

所以使用基数统计算法Hyperloglog,用来统计这种UV很合适,而且官方提出只存在0.81%的错误率,可以忽略不计的!

==pfadd:创建一组元素==

==pfcount:统计基数数量==

==pfmerge:合并多个元素组,并集到一个元素组中==

hyperloglog
hyperloglog

小结:

如果允许容错,那么一定可以使用Hyperloglog!

如果不允许容错,就是用set集合或者自己定义的数据类型即可!

3. bitmap(位存储)

统计用户信息:活跃、不活跃!登录、不登录!打卡、不打卡!只要是两个状态的字段,都可以使用Bitmap。(而不像java需要几个字段来记录 userid status date)

Bitmap位图,数据结构是操作二进制位来进行记录,只有0和1两个状态!

365天 = 365 bit,1字节 = 8 bit,365天 = 46字节左右!

使用bitmap来记录,周一到周日的打卡记录!

周一:0 ,周二:1,周三:1,周四:0,周五:1,周六:0,周日:0

==setbit:设置值==

bitmaps
bitmaps

==getbit:查看值==

bitmaps
bitmaps

==bitcount:统计个数==

bitmaps
bitmaps
小程序码【兜里的猫】

小程序码

欢迎访问博客网页版:www.wldeer.com
关注公众号:(同步更新)【FreeWeb开发者】
# Redis 

评论

兜里的猫 : 是md
Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×