第二节 - 数据结构.pdf

  1. 1、本文档共5页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第⼆章 - 数据结构 现在开始将探究Redis的5种数据结构,我们会解释每种数据结构都是什么,包含了什 么有效的⽅法 Method),以及你能⽤这些数据结构处理哪些类型的特性和数据。 ⽬前为⽌,我们所知道的Redis构成仅包括命令、关键字和值,还没有接触到关于数据 结构的具体概念。当我们使⽤set命令时,Redis是怎么知道我们是在使⽤哪个数据结 构?其解决⽅法是,每个命令都相对应于⼀种特定的数据结构。例如,当你使⽤set 命令,你就是将值存储到⼀个字符串数据结构⾥。⽽当你使⽤hset命令,你就是将 值存储到⼀个散列数据结构⾥。考虑到Redis的关键字集很⼩,这样的机制具有相当的 可管理性。 Redis的⽹站⾥有着⾮常优秀的参考⽂档,没有任何理由去重造轮⼦。但为了搞清楚这 些数据结构的作⽤,我们将会覆盖那些必须知道的重要命令。 没有什么事情⽐⾼兴的玩和试验有趣的东西来得更重要的了。在任何时候,你都能通 过键⼊flushdb命令将你数据库⾥的所有值清除掉,因此,不要再那么害羞了,去尝 试做些疯狂的事情吧 ! 字符串 (Strings) 在Redis⾥,字符串是最基本的数据结构。当你在思索着关键字-值对时,你就是在思 索着字符串数据结构。不要被名字给搞混了,如之前说过的,你的值可以是任何东 西。我更喜欢将他们称作“标量” Scalars),但也许只有我才这样想。 我们已经看到了⼀个常见的字符串使⽤案例,即通过关键字存储对象的实例。有时 候,你会频繁地⽤到这类操作: set users:leto {name: leto, planet: dune, likes: [spice]} 除了这些外,Redis还有⼀些常⽤的操作。例如,strlen能⽤来获取⼀个关键字对应 值的长度;getrange将返回指定范围内的关键字对应值;append会将value附加到 已存在的关键字对应值中 如果该关键字并不存在,则会创建⼀个新的关键字-值 对)。不要犹豫,去试试看这些命令吧。下⾯是我得到的: strlen users:leto (integer) 4 getrange users:leto 7 40 likes: [spice] append users:leto OVER 9000 !! (integer) 54 现在你可能会想,这很好,但似乎没有什么意义。你不能有效地提取出⼀段范围内的 JSON⽂件,或者为其附加⼀些值。你是对的,这⾥的经验是,⼀些命令,尤其是关 于字符串数据结构的,只有在给定了明确的数据类型后,才会有实际意义。 之前我们知道了,Redis不会去关注你的值是什么东西。通常情况下,这没有错。然 ⽽,⼀些字符串命令是专门为⼀些类型或值的结构⽽设计的。作为⼀个有些含糊的⽤ 例,我们可以看到,对于⼀些⾃定义的空间效率很⾼的 space-efficient)串⾏化对 象,append和getrange命令将会很有⽤。对于⼀个更为具体的⽤例,我们可以再 看⼀下incr、incrby、decr和decrby命令。这些命令会增长或者缩减⼀个字符串 数据结构的值: incr stats:page:about (integer) 1 incr stats:page:about (integer) incrby ratings:video:1 333 5 (integer) 5 incrby ratings:video:1 333 3 (integer) 8 由此你可以想象到,Redis的字符串数据结构能很好地⽤于分析⽤途。你还可以去尝试 增长users:leto ⼀个不是整数的值),然后看看会发⽣什么 应该会得到⼀个错 误)。 更为进阶的⽤例是setbit和getbit命令。“今天我们有多少个独⽴⽤户访问”是个在 Web应⽤⾥常见的问题,有⼀篇精彩的博⽂,在⾥⾯可以看到Spool是如何使⽤这两个 命令有效地解决此问题。对于1.2 亿个⽤户,⼀部笔记本电脑在不到50毫秒的时间⾥ 就给出了答复,⽽且只⽤了16MB的存储空间。 最重要的事情不是在于你是否明⽩位图 Bitmaps)的⼯作原理,或者Spool是如何去使 ⽤这些命令,⽽是应该要清楚Redis的字符串数据结构⽐你当初所想的要有⽤许多。然 ⽽,最常见的应⽤案例还是上⾯我们给出的:存储对象 简单或复杂)和计数。同 时,由于通过关键字来获取⼀个值是如此之快,字符串数据结构很常被⽤来缓存数 据。 散列 (Hashes) 我们已经知道把Redis称为⼀种关键字-值型存储是不太准确的,散列数据结构是⼀个

文档评论(0)

xuefei111 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档