1.Geospatial 地理位置
Redis的Geo在Redis3.2版本就推出了!这个功能可以推算地理位置的信息,两地之间的距离,方圆几里的人!
先准备一些城市地区的经纬度,查询工具:经纬度查询 - 坐标拾取系统
GEOADD key 经度 纬度 位置名称 :添加地理位置
有效的经度从-1 80度到180度;有效的纬度从-85.05112878度到85.05112878度。当坐标位置超出上述指定范围时,该命令将会返回一个错误。
GEOPOS :获取指定的经度纬度,key中存的越多,结果就越精确,因为它只查找key中的元素
GEODIST:返回两个给定位置的距离
如果两个位置之间的其中一个不存在 ,那么命令返回空值。
指定单位的参数unit必须是以下单位的其中一个:
m示单位为米。
km表示单位为千米。
mi示单位为英里。
ft表示单位为英尺。
如果用户没有显式地指定单位参数,那么GEODIST默认使用m(米)作为单位。
GEODIST命令在计算距离时会假设地球为完美的球形,在极限情况下,这-假设最大会造成0.5%的误差。
GEOREDIUS:以给定的经纬度为中心,查找某一半径下的位置
GEORAD IUSBYMEMBER :以指定的元素为中心查找指定距离内的位置
GEOHASH :返回一个或多个位置元素的Geohash表示,该命令将返回1 1个字符的Geohash字符串!(用的比较少)
GEO底层的实现原理其实就是Zset !我们可以使用Zset命令来操作geo !
如下:用ZSET的命令操作GEO
2.Hyperloglog 基数统计
先自行了解什么是基数。
PFADD:添加一个键为key的集合
PFCOUNT:统计集合中的不重复元素
PFMERGE:合并集合
Redis Hyperloglog基数统计的算法!
优点:占用的内存是固定, 2^64不同的元素的技术,只需要废12KB内存!如果要从内存角度来比较的话Hyperloglog首选!
网页的UV (一个人访问一一个网站多次,但是还是算作一个人! )
传统的方式,set保存用户的id ,然后就可以统计set中的元素数量作为标准判断!
这个方式如果保存大量的用户id ,就会比较麻烦!我们的目的是为了计数,而不是保存用户id ;0.81%错误率!统计UV任务,可以忽略不计的!
3)Bitmaps 位图
用于存储两个状态的值,用0和1表示
SETBIT:用于存储一个位图,语法:SETBIT key offset value
比如一周打卡的记录存储:用0表示未打卡,用1表示打卡了,就可以这样存
GETBIT:用于获取指定key的bitmap对应的某位置上的值,语法:GETBIT key offset
比如获取上面这一周中的周四和周六是否打卡