Redis的新数据类型

Bitmaps

简介

计算机基础单位

redis bitmap交集 redis bitmap数据类型_偏移量

Bitmaps数据类型
  1. Bitmaps本身不是一种数据类型, 实际上它就是字符串(key-value) , 但是它可以对字符串的位进行操作。
  2. Bitmaps单独提供了一套命令, 所以在Redis中使用Bitmaps和使用字符串的方法不太相同。 可以把Bitmaps想象成一个以位为单位的数组, 数组的每个单元只能存储0和1, 数组的下标在Bitmaps中叫做偏移量。

redis bitmap交集 redis bitmap数据类型_redis bitmap交集_02

我的理解

Bitmaps是String类型的键值对

Bitmaps以位为单位,每个单位的值是0或1

(让我想到了可以进行用户的签到,每日签到的记录)

因为Bitmaps的单位很小,所以做记录之后消耗的内存就很小

常见命令

命令格式

描述

setbit

设置Bitmaps中某个偏移量的值(0或1)

偏移量从0开始,类似于下标

getbit

获得指定偏移量上的值

bitcount[start end]

统计字符串从start字节到end字节比特值为1的数量

操作演示

redis bitmap交集 redis bitmap数据类型_redis bitmap交集_03

Bitmaps与Set的对比

假设网站有1亿用户, 每天独立访问的用户有5千万, 如果每天用集合类型和Bitmaps分别存储活跃用户可以得到表

redis bitmap交集 redis bitmap数据类型_偏移量_04

从图可以看出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 默认使用米作为单位