疯狂的小鸡

Redis入门-高级数据类型

字数统计: 822阅读时长: 2 min
2018/10/05 Share

此篇文章仅从理论上介绍几种Redis高级数据类型,有关各类型的具体操作,可见Redis常用命令总结
更多Redis入门系列文章,参见Redis入门-大纲

Bitmap

bitmap是一种伪数据类型,是基于String实现的。因为redis的key和value本身就支持二进制的存储方式,所以bitmaps只是一个独特的扩展。因为是面向字节操作,所以他的最大长度就是512M,最适合设置成2^32个不同字节。

一般的使用场景都是单一的统计,效率较高。比如签到,点击等。例如为了统计今日登录的用户数,我们建立了一个bitmap,每一位标识一个用户ID。当某个用户访问我们的网页或执行了某个操作,就在bitmap中把标识此用户的位置为1,当天结束时,例如我们的bitmap是1011110100100101, 我们就能知道今天有9个人登陆过,并且能知道是哪9个人。

HyperLogLog

Redis HyperLogLog 是用来做基数统计的算法,比如数据集 {1, 3, 5, 7, 5, 7, 8}, 那么这个数据集的基数集为 {1, 3, 5 ,7, 8}, 基数(不重复元素)为5。 基数估计就是在误差可接受的范围内,快速计算基数。

HyperLogLog 的优点是,在输入元素的数量或者体积非常非常大时,计算基数所需的空间总是固定 的、并且是很小的。在 Redis 里面,每个 HyperLogLog 键只需要花费 12 KB 内存,就可以计算接近 2^64 个不同元素的基 数。这和计算基数时,元素越多耗费内存就越多的集合形成鲜明对比。但是,因为 HyperLogLog 只会根据输入元素来计算基数,而不会储存输入元素本身,所以 HyperLogLog 不能像集合那样,返回输入的各个元素。应用场景如统计一个链接一天内有多少个不相同的IP访问。

需要注意的是,HyperLogLog 做基数统计返回的集合中唯一元素数量的近似值而不是确切值。

Geo

3.2版本里面新增的一个功能就是对GEO(地理位置)的支持。以经纬度作标识。

PUB/SUB

SUBSCRIBE、UNSUBSCRIBE和PUBLISH 三个命令实现了发布与订阅信息泛型(Publish/Subscribe messaging paradigm),在这个实现中, 发送者(发送信息的客户端)不是将信息直接发送给特定的接收者(接收信息的客户端), 而是将信息发送给频道(channel), 然后由频道将信息转发给所有对这个频道感兴趣的订阅者。也就是说发送者无须知道任何关于订阅者的信息, 而订阅者也无须知道是那个客户端给它发送信息, 它只要关注自己感兴趣的频道即可。

应用:发布/订阅的使用场景确实非常多。我已看见人们在社交网络连接中使用,还可作为基于发布/订阅的脚本触发器,甚至用Redis的发布/订阅功能来建立聊天系统。使用pub/sub主题订阅者模式,还可以实现1:N的消息队列。

CATALOG
  1. 1. Bitmap
  2. 2. HyperLogLog
  3. 3. Geo
  4. 4. PUB/SUB