翻译时间:2020-7-16至2020-7-17
官方英文文档:https://redis.io/topics/data-types
Strings【字符串】
字符串类型是最基础的Redis值类型。Redis的字符串类型是二进制安全的,这意味着Redis字符串可以包含任意类型的数据。例如:一个JPEG格式的图片或者一个序列化的Ruby对象。
一个字符串值最大长度是512MB。
你可以用Redis的字符串做很多有趣的事情,例如:
1、通过INCR命令族,使用字符串做自动计数。【INCR命令族包含,INCR、DECR、INCRBY等】
2、通过APPEND命令,在字符串尾部添加字符。
3、通过GETRANGE、SETRANGE命令,将字符串作为一个可随机访问的数组操作。
4、通过GETBIT、SETBIT命令,在一个小空间内编码大量数据,或者创建一个基于Redis的布隆过滤器。
Lists【链表】
注:Lists这个名称在不同设计的系统里的含义可能有所区别。例如在Python中Lists其实是一个数组。但是在Redis中,Lists通过链表实现,这和数组是有差别的。【这点在Redis详细介绍数据结构的官方文档中有提及】因此,此处译者不刻意翻译Lists,采用原名称,大家重在意会。
Redis的Lists类型是一个根据插入顺序排列的字符串列表。Redis的list头尾均可以插入新元素,头尾也可以对应的称为左右侧。
LPUSH命令用于在list头部插入一个新元素,与之对应的是RPUSH在尾部插入新元素。当我们对一个空键使用Lists相关命令做操作时,会自动创建一个新的list。如果一个list的元素均被清空,对应的键也会被移除。还有一个很便捷的语法特性,即,访问了一个不存在的键和访问一个空列表的表现是完全相同的。
list的最多拥有(2^32-1)个元素。【每个list超过400万个元素】
Redis Lists的一个主要特性是,可以以常量的时间复杂度在list的头尾处执行插入或者删除操作,及时list中有数百万个元素。通常来说,list访问元素是很快的,但是在极端的情况下,它可能很慢。即你尝试去访问的元素在一个很大的list的中间位置,这是一个时间复杂度为O(n)的操作。
你可以用Redis的Lists结构做很多有趣的事情,例如:
1、在一个社交网络中建立一个时间线模型,使用LPUSH命令在用户时间线上添加新元素,然后用LRANGE命令去检索最近添加的元素。
2、你可以并用LPSUH和LTRIM命令去创建一个固定最大长度的list,这个list永远只保留最近的N个元素。
3、列表可以用作消息传递原语,例如,用于创建后台作业的著名的Resque Ruby库。
4、你可以利用Lists做更多的事情,这个数据类型支持大量的命令,包括像BLPOP这样阻塞式的命令。
Sets【集合】
Redis集合是一组未排序的不重复字符串。无论集合内有多少元素,它都可以在O(1)时间内添加、移除或者查询是否存在元素。
Redis集合是绝对不允许重复的成员元素的,即使向集合内多次添加相同元素,最终也只会有一份被保留。值得一提的是,添加元素并不需要先检查元素是否存在,然后再添加,这样的额外操作。
Redis集合很有趣的一点是,它在服务端上便提供命令,支持对已有的集合做集合相关的操作。例如求并集、交集、差集等等,并且这些操作均耗时很短。
Redis集合支持的最大成员数量是(2^32-1)个。
你可以使用Redis集合做很多有趣的事情,例如:
1、你可以使用Redis集合追踪唯一元素。例如想知道访问某篇博客文章的所有去重后的IP地址的话,只需要在你每一次处理一个页面视图时候,使用SADD命令,它可以确保你不会插入重复的IP。
2、Redis集合可以很友好地展现关系。你可以创建一个标签系统,并将Redis的每一个集合对应上一个标签。然后你可以使用SADD命令,根据对象ID上的标签,将对象添加到对应集合中。如果你想所有对象的ID在同一时间都有三个不同的标签,使用SINTER命令即可。
3、你可以使用SPOP和SRANDMEMBER命令去获得集合中的一个随机元素。
Hashes【哈希】
Redis哈希记录了字符域和字符值的映射关系,他们是用来表示对象的最好的数据类型。例如,一个用户含有姓名、昵称、年龄等等信息域。
一个只有少量域的hash数据,只占用极少量空间【这里的少量意味着100个域左右】。所以你可以在一个小Redis实例中,存储数以百万计的对象。
Hashes主要被用于表示对象,但是它也可以存储很多元素,因而你可以使用Hashes结构完成许多其他任务。
每一个hash可以存储(2^32-1)个域值对。
Sorted sets【有序集合】
Redis的有序集合和Redis集合很类似,它们都不允许存在重复的字符串。它们之间的不同主要在有序集合的每一个成员都关联着一个score,这个score被用于排序。以score为依据,成员将被自低而高的排序。虽然成员是唯一的,但是scores可以重复。【score是一个浮点数】
你可以在有序集合中快速的添加、移除或者更新元素。【执行时间与成员数量成对数关系】既然元素是按正向顺序排列的,所以你可以通过score或者位置快速获取范围内的元素。访问有序集合的中间元素同样很快,你可以使用有序集合,把它作为一个不含重复元素的list。通过这种方式你可以快速的访问所有你想要的,例如:有序的元素,存在性检查,快速访问中间元素!
简而言之,你可以通过有序集合完成很多在其他数据库里很难建模的任务。
有序集合可以做:
1、为一个大型网络游戏设置排行榜,每当一个新分数被提交,你可以使用ZADD命令添加元素。你很容易通过ZRANGE命令获得顶部用户的信息。你还可以使用ZRANK命令,给定一个用户姓名,然后返回他的排名。结合ZRANK和ZRANGE命令,你可以向用户展示与他相近分数的用户。
2、有序集合通常用于索引存储在Redis中的数据。例如,如果您有许多表示用户的hashes,您可以使用一个有序集合,其中的元素以用户的年龄作为score,以用户的ID作为值。这样可以用一个给定的年龄快速的检索到所有用户,通过ZRANGEBYSCORE命令。
有序集合可能是Redis里最高级的数据类型了,所以花一些事件去熟悉所有的有序集合命令,去发现你可以利用Redis完成的事情。
Bitmaps和HyperLogLogs【位图和HyperLogLogs】
Redis支持位图和HyperLogLogs,两者都是基于字符串这个基本数据类型的,但是均有他们独特的语法。
==========================小可爱分界线==================================
最近在读Redis的官方文档,顺手翻译了下来。少部分地方采用了意译。
如果有翻译不恰当的地方,敬请斧正ヾ(๑╹◡╹)ノ"