Redis 的数据类型
一些命令需要结合 redis 的数据类型来说。
Redis 4.0 之前有5种数据类型,分别是:字符串(string)、散列(hash)、列表(list)、集合(set)、有序集合(zset)。
在 4.0 版本,Redis 新加了一种 stream 的类型。暂且先不说,以后会新开文章具体讲解。
基本知识:
- 数据类型不支持嵌套,即所有的类型的元素只能是字符串,不能是散列和集合或者有序集合。
- 除了字符串之外,每种数据类型的命令都有一个开头。
- 散列(h)
- 列表(l)
- 集合(s)
- 有序集合(z)
- stream(x)
字符串
Redis 的字符串使用了 Redis 自己实现的是一个字符串结构叫简单动态字符串:SDS,simple dynamic string
Redis 中的字符串的最大存储是 512M。
并且可以当作数字来使用的。比如 incr、incrby、decr、decrby 都是基于数字的值进行操作的。我们可以通过 incr 来实现一个计数器。或者是自增数字发生器。
散列
散列的底层是用字典实现的。并且其就是一个字典结构。可以构成: field:value 的格式。
如下图所示:
列表
列表底层是使用双向链表实现的。通过列表可以实现队列功能。
通过以下命令可以通过列表实现数组的功能:
lindex key index
lset key index value
rpoplpush 可以实现原子性地将一个数据从表尾放到另一个或者自己的表头。
集合
Redis 中的集合与数学上的集合具有相同的性质,无序且重复。并且 Redis 提供了 diff、inter、union 三种集合操作的命令。
有序集合
有序集合使用跳跃表实现。集合是无序的,并且值不能重复。集合这种数据类型对于很多场景是不适用的。比如说,排行榜。于是 Redis 提供了一种有序集合类型。有序集合是一个每个元素都有一个分值代表在集合中的排行的一种数据结构。如果分值相同,那么按照元素的字典序进行排序。
什么是跳跃表,可以参见这篇文章:http://blog.jobbole.com/111731/