Redis 常用数据结构

1、总体结构

KEYVALUE
stringstring
stringlist
stringset
stringhash
stringzset

Redis 中的数据,总体上是键值对,不同数据类型指的是键值对中的类型。

2、string 类型

Redis 中最基本的类型,它是 key 对应的一个单一值。二进制安全,不必担心由于编码等问题导致二进制数据变化。所以 redis 的 string 可以包含任何数据,比如 jpg 图片或者序列化的对象。Redis 中一个字符串值的最大容量是 512M。

3、list 类型

Redis 列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)。它的底层是双向链表,所以它操作时头尾效率高,中间效率低(额外花费查找插入位置的时间)。

在 Redis 中 list 类型是按照插入顺序排序的字符串链表。和数据结构中的普通链表一样,我们可以在其头部(left)和尾部(right)添加新的元素。在插入时,如果该键并不存在,Redis 将为该键创建一个新的链表。与此相反,如果链表中所有的元素均被移除,那么该键也将会被从数据库中删除。List 中可以包含的最大元素数量是 2^32-1 个。

list 是一个有序可以重复的数据类型。

4、set 类型

Redis 的 set 是 string 类型的无序集合。它是基于哈希表实现的。set 类型插入数据时会自动去重。最大可以包含 2^32-1 个元素。

5、hash 类型

Redis 本身就是一个键值对集合,而 hash 类型的 Value 也是一个键值对集合,可以将 Value 当做 Java 中的 Map<String,String>对待。

6、zset 类型

Redis zset 和 set 一样也是 string 类型元素的集合,且不允许重复的成员。不同的是每个元素都会关联一个 double 类型的分数。redis 正是通过分数来为集合中的成员进行从小到大的排序。zset 的成员是唯一的,但分数(score)却可以重复。

7、Geospatial

Redis 在 3.2 推出 Geo 类型,该功能可以推算出地理位置信息,两地之间的距离。

8、HyperLogLogs

用于大数据量基数统计,速度非常快,占用内存非常小。每个 HyperLogLog 键只需要花费 12KB 内存,就可以计算接近 2^64 个不同元素的基数。比如计算网站 UV(User view,用户访问数量,一个用户一天访问同一个 URL 地址多次合并为一次)。

9、bitmap

直接对 string 的二进制位进行操作的一组命令。

统计数据特别块,举个例子,用 bitmap 统计在线人数,准备一个全部为 0 的字符串,有一个在线就将一个 0 改为 1。

10、常用数据类型应用场景

数据类型应用场景
string分布式 Session 存储 分布式数据库 ID 计数器:统计网站访问量
hash存储对象信息(购物车中的商品信息) 存储表的信息
list实现队列、栈操作 汇总日志 粉丝列表 关注的人列表
set签到 打卡 点赞
zset排行榜 百度热点搜索
geospatial获取地理位置信息 两地之间的距离
hyperloglogs基数统计
bitmaps统计用户访问次数