Geospatial
朋友的定位,附近的人,打车距离计算
底层是
Zset
,即可以使用Zset的命令操作Geospatial
Redis3.2 开始支持的
1.添加地理位置
- 两极无法添加
- 经度:-180 ~ 180(度)
- 纬度:-85.05112878 ~ 85.05112878(度)
geoadd
key 经度 纬度 名称
2.获取指定位置的地理位置
geopos
key 名称
3.返回两个给定位置之间的距离(直线距离)
- 单位:
- m :米
- km :千米
- mi : 英里
- ft :英尺
geodist
key
4.以给定值为半径,以经度和维度为中心,查找
- 附近的人(获得所有附近的人的地址(开启定位))通过半径查询
georadius
key 经度 纬度 半径 单位
5.以给定值为半径,以成员(城市名)为中心,查找
georadiusbymember
key 成员名 半径 单位
6.返回一个或多个位置元素的geohash表示
- 如果两个字符串越相似,表示两个地方越近
geohash
key 成员1 成员2
Hyperloglog
基数统计的算法;
类似 Set 作用,但可以节省大量内存!!
- 优点
- 占用内存是固定的,2的64次方 个不同的元素的基数,只需要 12KB 的内存。(大数据情况下,有0.81%错误率)
基数:集合中元素的个数(先去重),如{1,2,2,3} 其基数为3(集合去重后为1,2,3 有3个元素)
网页的UV(一个人访问访问一个网站多次,但是还是算作一个人)
传统实现UV:Set保存用户的Id,然后统计 set 中的元素的数量作为标准判断(这种需要保存大量用户的ID,需要大量的内存占用)
Redis2.8.9 开始支持
1.测试
创建一组元素 :
pfadd
key ele1 ele2 ele3 …统计对应key的基数:
pfcount
key1 [key2 …] // 多个key 就是统计这些key并集的基数合并:
pfmerge
destkey sourceKey1 sourceKey2 [sourceKey3 …]
Bitmaps
位存储,位图(操作二进制)
统计用户信息,活跃,不活跃!登录、未登录!打卡,365打卡!(只有两个状态的属性都可以使用!!)
1.案例:一周打卡记录
一周过去
setbit
key offset bit
查看单天打卡情况
getbit
key offset
统计所有打卡的天数
bitcount
key