数据类型 Data Types

字符串(Strings)

字符串是一种最基本的Redis值类型。Redis字符串是二进制安全的,这意味着一个Redis字符串能包含任意类型的数据,例如: 一张JPEG格式的图片或者一个序列化的Ruby对象。git

一个字符串类型的值最多能存储512M字节的内容。github

你能够用Redis字符串作许多有趣的事,例如你能够:web

  • 利用INCR命令簇(INCRDECRINCRBY)来把字符串看成原子计数器使用。redis

  • 使用APPEND命令在字符串后添加内容。数据库

  • 将字符串做为GETRANGESETRANGE的随机访问向量。安全

  • 在小空间里编码大量数据,或者使用GETBITSETBIT建立一个Redis支持的Bloom过滤器。网络

查看全部可用的字符串命令获取更多信息。app

列表(Lists)

Redis列表是简单的字符串列表,按照插入顺序排序。 你能够添加一个元素到列表的头部(左边)或者尾部(右边)。测试

LPUSH命令插入一个新元素到列表头部,而RPUSH命令 插入一个新元素到列表的尾部。当 对一个空key执行其中某个命令时,将会建立一个新表。 相似的,若是一个操做要清空列表,那么key会从对应的key空间删除。这是个很是便利的语义, 由于若是使用一个不存在的key做为参数,全部的列表命令都会像在对一个空表操做同样。this

一些列表操做及其结果:

LPUSH mylist a   # now the list is "a"
LPUSH mylist b   # now the list is "b","a"
RPUSH mylist c   # now the list is "b","a","c" (RPUSH was used this time)

一个列表最多能够包含232-1个元素(4294967295,每一个表超过40亿个元素)。

从时间复杂度的角度来看,Redis列表主要的特性就是支持时间常数的 插入和靠近头尾部元素的删除,即便是须要插入上百万的条目。 访问列表两端的元素是很是快的,但若是你试着访问一个很是大 的列表的中间元素仍然是十分慢的,由于那是一个时间复杂度为 O(N) 的操做。

你能够用Redis列表作许多有趣的事,例如你能够:

  • 在社交网络中创建一个时间线模型,使用LPUSH去添加新的元素到用户时间线中,使用LRANGE去检索一些最近插入的条目。

  • 你能够同时使用LPUSHLTRIM去建立一个永远不会超过指定元素数目的列表并同时记住最后的N个元素。

  • 列表能够用来看成消息传递的基元(primitive),例如,众所周知的用来建立后台任务的Resque Ruby库。

  • 你可使用列表作更多事,这个数据类型支持许多命令,包括像BLPOP这样的阻塞命令。请查看全部可用的列表操做命令获取更多的信息。

集合(Sets)

Redis集合是一个无序的字符串合集。你能够以O(1) 的时间复杂度(不管集合中有多少元素时间复杂度都为常量)完成 添加,删除以及测试元素是否存在的操做。

Redis集合有着不容许相同成员存在的优秀特性。向集合中屡次添加同一元素,在集合中最终只会存在一个此元素。实际上这就意味着,在添加元素前,你并不须要事先进行检验此元素是否已经存在的操做。

一个Redis列表十分有趣的事是,它们支持一些服务端的命令从现有的集合出发去进行集合运算。 因此你能够在很短的时间内完成合并(union),求交(intersection), 找出不一样元素的操做。

一个集合最多能够包含232-1个元素(4294967295,每一个集合超过40亿个元素)。

你能够用Redis集合作不少有趣的事,例如你能够:

  • 用集合跟踪一个独特的事。想要知道全部访问某个博客文章的独立IP?只要每次都用SADD来处理一个页面访问。那么你能够确定重复的IP是不会插入的。

  • Redis集合能很好的表示关系。你能够建立一个tagging系统,而后用集合来表明单个tag。接下来你能够用SADD命令把全部拥有tag的对象的全部ID添加进集合,这样来表示这个特定的tag。若是你想要同时有3个不一样tag的全部对象的全部ID,那么你须要使用SINTER.

  • 使用SPOP或者SRANDMEMBER命令随机地获取元素。

  • 查看完整的集合命令列表获取更多的信息。

哈希(Hashes)

Redis Hashes是字符串字段和字符串值之间的映射,因此它们是完美的表示对象(eg:一个有名,姓,年龄等属性的用户)的数据类型。

redis>  HMSET user:1000 username antirez password P1pp0 age 34

OK

redis>  HGETALL user:1000

1) "username"
2) "antirez"
3) "password"
4) "P1pp0"
5) "age"
6) "34"

redis>  HSET user:1000 password 12345

(integer) 0

redis>  HGETALL user:1000

1) "username"
2) "antirez"
3) "password"
4) "12345"
5) "age"
6) "34"

redis> 

一个拥有少许(100个左右)字段的hash须要 不多的空间来存储,全部你能够在一个小型的 Redis实例中存储上百万的对象。

尽管Hashes主要用来表示对象,但它们也可以存储许多元素,因此你也能够用Hashes来完成许多其余的任务。

一个hash最多能够包含232-1 字段-值对(超过40亿)。

查看完整的Hash命令列表获取更多信息。

有序集合(Sorted sets)

Redis有序集合和Redis集合相似,是不包含 相同字符串的合集。它们的差异是,每一个有序集合 的成员都关联着一个评分,这个评分用于把有序集 合中的成员按最低分到最高分排列。

使用有序集合,你能够很是快地(O(log(N)))完成添加,删除和更新元素的操做。 由于元素是在插入时就排好序的,因此很快地经过评分(score)或者 位次(position)得到一个范围的元素。 访问有序集合的中间元素一样也是很是快的,所以你可使用有序集合做为一个没用重复成员的智能列表。 在这个列表中, 你能够轻易地访问任何你须要的东西: 有序的元素,快速的存在性测试,快速访问集合中间元素!

简而言之,使用有序集合你能够很好地完成 不少在其余数据库中难以实现的任务。

使用有序集合你能够:

  • 在一个巨型在线游戏中创建一个排行榜,每当有新的记录产生时,使用ZADD 来更新它。你能够用ZRANGE轻松地获取排名靠前的用户, 你也能够提供一个用户名,而后用ZRANK获取他在排行榜中的名次。 同时使用ZRANK和ZRANGE你能够得到与指定用户有相同分数的用户名单。 全部这些操做都很是迅速

  • 有序集合一般用来索引存储在Redis中的数据。 例如:若是你有不少的hash来表示用户,那么你可使用一个有序集合,这个集合的年龄字段用来看成评分,用户ID看成值。用ZRANGEBYSCORE能够简单快速地检索到给定年龄段的全部用户。

  • 有序集合或许是最高级的Redis数据类型,因此花些时间查看完整的有序集合命令列表去探索你能用Redis干些什么吧!

相关文章
相关标签/搜索