这三个特殊数据类型应用场景比较多
Genospatial 地理位置
此功能可以推算地理位置的信息,俩地之间的距离,方圆几里的人
一般都是通过java代码导入
只有六个命令
geoadd 添加指定的空间地理位置
- geoadd k 经度 纬度 k1 经度 纬度 k2 …
- 有效的纬=经度 -180 ~180 有效的纬度 -85.05 ~ 85.05
geopos 从k 里查询 具体地点(k2)的经纬度
- geodist k k1
geolist 返回俩个给定位置之间的距离
- geolist k k1 k2 单位
- 如果俩个位置之间的其中一个不存在,则返回空
- 单位
- m 米
- km 千米
- mi 英里
- ft 英尺
georadius 以给定的经纬度为中心,找出某一半径内的元素
- georadius k 经度 纬度 半径 单位 [withdist] (显示到中心距离) [withcoord] (显示经纬度) [ count 1] (筛选出指定个数的元素)
georadiusByMember 以给定的元素为中心,找出某一个半径内的元素
- georadiusByMember k k1 半径 单位
geohash 返回一个或多个位置元素的geohash表示
- 该命令将返回11位的geohash字符串 一般用不到
- geohash k k1 k2 …
geo 底层的实现原理就是 zset 我们可以通过Zset的命令来操作geo !
Hyperloglog 基于基数统计的算法的一种数据结构
什么是基数
根据对等这种关系对集合进行分类,凡是互相对等的集合就划入同一类。这样,每一个集合都被划入了某一类。任意一个集合A所属的类就称为集合A的基数(可以理解为不重复元素的个数),记作|A|(或cardA)。这样,当A 与B同属一个类时,A与B 就有相同的基数,即|A|=|B|。而当 A与B不同属一个类时,它们的基数也不同。
优点:占用的内存十分小,如果要从内存角度来比较的话 Hyperloglog首选 (但是有 0.81%的错误率,统计UV任务,可以忽略不计)
UV:访问某站点的用户数
- 命令只有三个 pfadd pfcount pfmerge
- pfadd k1 v1 v2 v3 … 创建添加元素
- pfcount k1 计数
- pfadd k2 v1 v2 v3 …
- pfmerge newk k1 k2 合并俩组 k1和k2 (k1 k2 的并集)
- pfcount newk 查看并集的数量
在做 UV任务时,如果一个用户重复查看一篇文章,可以存入,在求访问量时,输出和作者的并集,会自动去重
在做UV计数时,如果有容错,千万使用Hyperloglog
Bitmap 位图 采用位存储 操作二进制位来进行记录
统计用户信息,活跃 不活跃 | 登录 未登录 | 打卡 未打卡 俩个状态的都可以使用 bitmaps
- 这里面的 v 只能取 0 1
- setbit k k1 v
- getbit k k1
- bitcount k 统计k中 v是1的个数
用例 ---- 成员打卡功能
setbit userid 1 1 //设置星期一打卡
setbit userid 2 0 //星期二没打卡
.....
//查看某一天是否打卡
getbit userid 1 //查看星期一是否打卡
// 统计打卡的天数
bitcount userid //统计打卡的天数