Redis的新数据类型
Bitmaps
简介
计算机基础单位
Bitmaps数据类型
- Bitmaps本身不是一种数据类型, 实际上它就是字符串(key-value) , 但是它可以对字符串的位进行操作。
- Bitmaps单独提供了一套命令, 所以在Redis中使用Bitmaps和使用字符串的方法不太相同。 可以把Bitmaps想象成一个以位为单位的数组, 数组的每个单元只能存储0和1, 数组的下标在Bitmaps中叫做偏移量。
我的理解
Bitmaps是String类型的键值对
Bitmaps以位为单位,每个单位的值是0或1
(让我想到了可以进行用户的签到,每日签到的记录)
因为Bitmaps的单位很小,所以做记录之后消耗的内存就很小
常见命令
命令格式 | 描述 |
setbit | 设置Bitmaps中某个偏移量的值(0或1) 偏移量从0开始,类似于下标 |
getbit | 获得指定偏移量上的值 |
bitcount[start end] | 统计字符串从start字节到end字节比特值为1的数量 |
操作演示
Bitmaps与Set的对比
假设网站有1亿用户, 每天独立访问的用户有5千万, 如果每天用集合类型和Bitmaps分别存储活跃用户可以得到表
从图可以看出Bitmaps的存储优势,针对特殊的条件占用资源远远小于Set
HypeLoglog
介绍
在工作当中,我们经常会遇到与统计相关的功能需求,比如统计网站PV(PageView页面访问量),可以使用Redis的incr、incrby轻松实现。但是消耗资源较大
HypeLoglog可以做到很好的基数统计算法
HyperLogLog 的优点是,在输入元素的数量或者体积非常非常大时,计算基数所需的空间总是固定的、并且是很小的。
什么是基数?
比如数据集 {1, 3, 5, 7, 5, 7, 8}, 那么这个数据集的基数集为 {1, 3, 5 ,7, 8}, 基数(不重复元素)为5。 基数估计就是在误差可接受的范围内,快速计算基数。
常用命令
命令格式 | 描述 |
pfadd < element> [element …] | 添加指定元素到 HyperLogLog 中 |
pfcount [key …] | 计算HLL的近似基数,可以计算多个HLL,比如用HLL存储每天的UV,计算一周的UV可以使用7天的UV合并计算即可 |
pfmerge [sourcekey …] | 将一个或多个HLL合并后的结果存储在另一个HLL中,比如每月活跃用户可以使用每天的活跃用户来合并计算可得 |
Geospatial
介绍
Redis 3.2 中增加了对GEO类型的支持。GEO,Geographic,地理信息的缩写。该类型,就是元素的2维坐标,在地图上就是经纬度。redis基于该类型,提供了经纬度设置,查询,范围查询,距离查询,经纬度Hash等常见操作。
常用命令
命令格式 | 描述 |
geoadd< longitude> [longitude latitude member…] | 添加地理位置(经度,纬度,名称) |
geopos [member…] | 获得指定地区的坐标值 |
geodist | 获取两个位置之间的直线距离 |
geodist [m|km|ft|mi ]
m 表示单位为米[默认值]。
km 表示单位为千米。
mi 表示单位为英里。
ft 表示单位为英尺。
如果用户没有显式地指定单位参数, 那么 GEODIST 默认使用米作为单位
m 表示单位为米[默认值]。
km 表示单位为千米。
mi 表示单位为英里。
ft 表示单位为英尺。
如果用户没有显式地指定单位参数, 那么 GEODIST 默认使用米作为单位