Redis 数据类型
该文章是对Redis官方文档的翻译
字符串(Strings)
字符串是Redis值的最基础的类型。Redis字符串是二进制安全的,这意味着一个Redis字符串可以包含任何种类的数据,例如一个JPEG图像或者一个序列化的Ruby对象。
一个字符串值最多可以保存512M字节的内容。
你可以使用Redis的字符串做一些有趣的事情,例如你可以:
- 在使用命令INCR系列( INCR, DECR, INCRBY)命令时将字符串作为的原子计数器。
- 使用APPEND命令追加字符串。
- 将字符串作为GETRANGE 和 SETRANGE的随机访问向量。
- 在小空间里编码大量数据, 或者使用 GETBIT 和 SETBIT创建一个Redis支持的Bloom过滤器。
查看可用的字符串命令获得更多信息
列表(Lists)
Redis列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素导列表的头部(左边)或者尾部(右边)
LPUSH 命令插入一个新的元素导头部, 而 RPUSH插入一个新元素导尾部.当一个这两个操作在一个空的Key上被执行的时候一个新的列表被创建。相似的,如果一个列表操作清空一个列表那么对应的key将被从key空间删除。这是非常方便的语义,因为他们被调用使用一个空列表完全就像他们被调用时使用一个不存在的键值(可以)做为参数。
一些类表操作和结果的例子:
LPUSH mylist a # 现在类表中是 "a"
LPUSH mylist b # 现在列表中是 "b","a"
RPUSH mylist c # 现在类表中是 "b","a","c" (这次RPUSH被使用)
一个列表最多可以包含 232 - 1 个元素 (4294967295, 每个列表超过40亿个元素)。
从时间复杂度的角度来看Redis列表的主要特征是在头和尾的元素插入和删除是固定时间,即便是数以百万计的插入。. 在列表的两端访问元素是非常快的但是如果你试着访问一个非常大的列表的中间的元素是很慢的,因为那是一个O(N)操作。
你可以用Redis列表做很多有趣的事情,比如你可以:
- 在一个社交网络中建立一个时间线模型,使用LPUSH 去添加新的元素到用户的时间线, 使用LRANGE去接收一些最近插入的元素。
- 你可以将 LPUSH 和 LTRIM 一起用去创建一个永远也不会超过指定元素数目的列表,但是记住是最后的N个元素。
- 列表能够被用来作为消息传递primitive[译注:不清楚表达的意思], 例如众所周知的用来创建后台工作的Resque Ruby库.
- 你可以使用列表做更多的事,这个数据类型支持许多命令,包括像BLPOP这样的阻塞命令。请查看 可获得的列表操作命令 以获得更多的信息。
集合(Sets)
Redis 集合(Set)是一个无序的字符串集合. 你可以以O(1)的时间复杂度 (无论集合中有多少元素时间复杂度都是常量)完成添加,删除,以及测试元素是否存在。
Redis 集合拥有令人满意的不允许包含相同成员的属性。多次添加相同的元素,最终在集合里只会有一个元素。
实际上说这些就是意味着在添加元素的时候无须检测元素是否存在。
一个Redis集合的非常有趣的事情是他支持一些服务端的命令从现有的集合出发去进行集合运算,因此你可以在非常短的时间内进行合并(unions), 求交集(intersections),找出不同的元素(differences of sets)。
一个集合最多可以包含 232 - 1 个元素(4294967295, 每个集合超过40一个元素).
你可以使用集合多很多有趣的事情,比如你能够:
- 你可以使用集合追踪一件(独一无二的)事情,想要知道所有访问一个博客文章的独立IP? 每次当你处理一个页面访问的事简单的使用SADD。你可以肯定重复的IP是不会被插入的。
- Redis 集合是很擅长表现关系的。你可以使用Redis集合创建一个tagging系统去表现每一个tag。接下来你能够使用SADD命令将有一个给定tag的所有对象的所有ID添加到一个用来展现这个特定tag的集合里。你想要同时有三个不同tag的所有对象的ID吗?使用SINTER就好了。
- 使用 SPOP 或者 SRANDMEMBER 命令你可以使用集合去随意的抽取元素。
- 查看 完整的集合命令列表 以获得更多的信息。
哈希(Hashes)
Redis Hashes是字符串字段和字符串值之间的映射,因此他们是展现对象的完美数据类型。 (例如:一个有名,姓,年龄等等属性的用户):
@cli
HMSET user:1000 username antirez password P1pp0 age 34
HGETALL user:1000
HSET user:1000 password 12345
HGETALL user:1000
一个带有一些字段(这里的一些意味着高达一百左右)的hash仅仅需要一块很小的空间存储,因此你可以存储数以百万计的对象在一个小的Redis实例中。
哈希主要用来表现对象,他们有能力存储很多对象,因此你可以将哈希用于许多其他的任务。
每一个哈希可以存储超过232 - 1 字段-值 对 (超过40亿).
查看 完整的哈希命令列表 以获得更多的信息。
有序集合(Sorted Sets)
Redis有序集合与普通集合非常相似,是一个没有重复元素的字符串集合。不同之处是有序集合的没有成员都关联了一个评分,这个评分被用来按照从最低分到最高分的方式排序集合中的成员。集合的成员是唯一的,但是评分可以是重复了。
使用有序集合你可以以非常快的速度(O(log(N)))添加,删除和更新元素。因为元素是有序的, 所以你也可以很快的根据评分(score)或者次序(position)来获取一个范围的元素。访问有序集合的中间元素也是非常快的,因此你能够使用有序集合作为一个没有重复成员的智能列表。在有序集合中,你可以很快捷的访问一切你需要的东西:有序的元素,快速的存在性测试,快速访问集合的中间元素!
简而言之使用有序集合你可以做完成许多对性能有极端要求的任务,而那些任务使用其他类型的数据库真的是很难完成的。
使用有序集合你可以:
- 在一个大型的在线游戏中展示一个排行榜,在那里一旦一个新的分数被提交,你可以使用ZADD命令去更新它.你也可用使用 ZRANGE命令来得到顶级的用户,你还可以使用ZRANK命令根据用户名返回该用户在排行榜中的位次。同时使用ZRANK 和 ZRANGE 你可以显示和给定用户分数相同的所有用户。所有这些操作都非常的快速。
- 有序集合常常被用来索引存储在Redis中的数据。举个例子,如果你有许多的哈希(Hashes)来代表用户,你可以使用一个有序集合,这个集合中的元素的年龄字段被用来当做评分,而ID作为值。因此,使用 ZRANGEBYSCORE 命令,那是微不足道的并且能够很快的接收到给定年龄段的所有用户。
- 有序集合或许是最高级的Redis数据类型,因此花点时间查看 完整的有序集合命令列表 去发现你能用Redis做些什么。
已有 0 人发表留言,猛击->> 这里<<-参与讨论
ITeye推荐