Redis数据类型概述【官方文档翻译】

翻译时间: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的官方文档,顺手翻译了下来。少部分地方采用了意译。

如果有翻译不恰当的地方,敬请斧正ヾ(๑╹◡╹)ノ"

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值