Redis入门经典——The Little Redis Book (翻译)

标签: redis 经典 the | 发表时间:2014-11-03 22:05 | 作者:u012327100
出处:http://blog.csdn.net

The Little Redis Book

                By Karl Seguin

 

 

关于本书:本书完全免费下载。你可以随意转载,复制,但请你注明作者,Karl Seguin。译者,WY。以及不要用于商业用途。

关于作者:Karl 同志是广大屌丝IT码农中的一员。但经验丰富,不仅活好而且跨领域甚广。闲暇之余,跟笔者一样闲的蛋疼,写了几本小书。没想到还挺受欢迎,特别是The Little MongoDb Book,风靡码农界。更多资讯看他的个人博客http://openmymind.net 。

本书最新版本: http://github.com/karlseguin/the-little-redis-book

 

 

 

 

 

 

 

 

 

简介:

最近几年,用于数据持久化查询的的技术和工具到一个突飞猛进的地步。但可以打包票的说,关系型数据也就那样了,同时,围绕数据的那套系统却肯定会是大不一样的。

在所有的工具和技术解决方案中,Redis 是最令我虎躯一震的。第一是因为它太TM容易上手了。你只需花费几小时的时间就可以上手使用了。第二,它用一种非常通用的方法解决了一系列特殊问题。为什么呢?因为他并非所有的东西都是有关数据的。你了解的越多,对这句话的理解就会越深刻。

当你能仅用Redis 完成一个系统时,我想你已经找到它提供的最普遍的解决方案——不管该系统是传统的关系型数据库,还是一个基于文档的系统。在这方面,它有点像是一个索引引擎,不过你无须将所有应用构建在Lucene(由apache发布的著名的全文检索引擎工具包)上。当然,也就这一点相似而已。

本书的目的是介绍Redis 的一些基础。我们会把重点放在Redis 的五种数据结构以及不同的数据建模方法。当然还会接触一些关键的管理方法以及调试技巧。

   

 

 

开始:

     学习的方法不同,有人喜欢上手,有人喜欢看视频,也有人喜欢看书。不过最有效的方法不过直接试用一下了。在学习以下内容时,最好先安装一个Redis,灰常简单的哦。

 Redis是不支持Widows的,但这妨碍不了万能的码农们如果只是玩票的话,用 https://github.com/MSOpenTech/redis

*nix下的安装就自行谷歌下吧。

 安装完成后,以Linux 下为例,运行./redis-server.启动服务器,然后运行./redis-cli,将以默认接口(6379)连接本地服务.你可以在命令行下输入info 测试服务器的状态。

 

 

 

第一章   基础

  在研究Redis的时候首先我们要知道Redis是什么,他是为解决什么样的问题而出现的。

   Redis常被描述为一种常驻内存的的持续性的key_value存储。我认为这样描述有失精准,Redis的确是将所有数据存储在内存中,它也的确持续性的写入磁盘,但他绝不仅是简单的key_value存储。认识到这个偏见非常重要,否则你用它解决的问题就会大大变少。

事实上Redis发布了五种不同的数据结构,只有一种是典型的key_value结构。理解这五种结构,他们如何工作,相应的内嵌方法,以及根据他们如何建模才是重中之重。首先,

让我们理清数据结构的用途吧。

如果我们打算使用数据结构的概念到这个关联世界中,我们首先想到的就是数据库的一种简单数据结构——表(tables).表是一种既复杂又很灵活的结构。几乎所有的东西都可以用表来模拟,存储。然而他也并非没有缺点。因为并非所有的东西都像我们想的那样简单。如果我们用到的结构就是这种特殊的,无法用普遍方法解决的话怎么办呐?

对特殊的问题应用特殊的数据结构。我们编码不就是这样吗?你不会为每一条数据使用哈希表,你自然也不会用一个标量变量。对我来说,这就是Redis的用途。如果你是跟scalars,lists,hashes,或者sets打交道,为什么不把他们存储为这种形式呢。

基本模块:

1,数据库

Redis也有你所熟悉的数据库的概念,一个数据库包含一系列数据。数据库的经典用途就是将一个应用的所有数据组合在一起,将它与其他的应用分离开。

在Redis里,数据库被简单地用一个数字来识别,比如用0来表示默认的数据库。你过你想换一个不同的数据库,可以在命令行里使用 select命令。比如: select1. Redis会回复OK 。表示你修改成功。如果想换回来,只需要输入 select0 即可。

2,命令行,Keys 和 Values

   因为Redis不仅仅是key_value存储服务,而且Redis的五种数据结构至少有一个key和一个value.这样我们理解key_value就显得尤为重要了。

Keys是你识别一段数据的依据。我们以后会经常跟keys打交道,但现在,你只需了解一个key大概是长这样就可以了: user:leto .我们可以猜测这是一个用户名为leto的用户信息。冒号没有任何特殊意义,只是作为一个分隔符。

Values 代表与keys相关联的实际信息。他们可以是任何东西。可以是字符串,整数,甚至序列化对象(JSON,XML等)。对Redis来说,不管他们是什么格式,不过是一系列的字节而已。注意不同的驱动会处理不同格式的对象,所以本书我们只讨论字符串,整数以及JSON。

好了,现在开始动手。输入以下命令:

set  users:leto ‘{“name”:”leto”,”planet”:”dune”,”likes”:[“spice”]}’

这是Redis最基本的操作。首先是set 命令,后边是两个参数。第一个是要设定的keys参数,第二个是values参数。许多命令(并非全部)是只有一个key参数。那如何获取数据呢,如下:

get users:leto
    现在可以自己尝试下其他的组合。Keys和values是最基本的概念,而get和set是操作他们最简单的方式。

         3,查询

由上文我们可以看到,对于Redis而言,keys代表一切,而values无法查询到任何东西。比如:上文中,我们无法通过属性planet 的dune 值查询到任何东西。

许多人认为这将导致很多不便。因为我们知道数据查询要求灵活,强大,而Redis的方法显得有些原始,不切实际。不要为这点耿耿于怀。记住,Redis不是一种万能的方法。查询的限制是Redis本身具有的。

     4,内存和持久化

我们之前提过Redis是常驻内存的持久化存储。Redis会依据有多少keys改变而将相应的数据库输出到磁盘。默认配置,如果有超过1000个keys改变,Redis每60秒做一次存储。

同时,Redis还有append模式。当一个key改变时,磁盘上的append_only_file会相应更新。有些情况下会丢失60秒的数据的代价来换取性能,当然,这会导致一些硬件或者软件的问题。有些情况下这个代价是无法接受的。Redis将选择权交给我们。第六章的时候,还会有第三种选项,将持续性交给slave进程处理。

Redis将所有数据存储在内存里,最明显的代价就是:占据太多RAM,而这仍然是服务器硬件中最贵的部分。

我觉得有些开发者可能忘了数据所占的空间其实不大。莎士比亚的全集才仅占不到5.5M的内存。而且,其他的解决方案无非是通过不断IO或者大量消耗CPU,也是得不偿失的。所以除非是存储非常大的多媒体文件,内存方面真不是问题。

Redis的确是支持虚拟内存的。但是这个特点已被证实是个败笔,不被推荐。

(提示:5.5M的莎士比亚全集可以被压缩为2M。虽然Redis不提供自动压缩功能,但是因为它把values看做字节,所以对此数据进行压缩是非常可行的。)

      5,标题串联

     最后我想把所有的小标题串联起来。特别是,查询限制,数据结构,Redis的内存存储方式。

     当你把这些东西结合起来的时候,就会得出一个灰常牛逼的结果:速度。一些人可能会想,“当然了,一切都在内存中必须快啊”。这只是一部分而已。Redis优于其他解决方案的真正原因是他的特殊的数据结构。

     有多快?这取决于很多因素——所用的命令,数据类型,等等。Redis的性能趋向于每秒以万记甚至以十万计数。你可以运行 redis_benchmark (与redis-server,redis-cli同一文件夹下)来测试。

    以上这些是非常重要的因为它会影响你以后将如何使用Redis。有SQL使用背景的开发者趋向于减少访问数据库的次数。这对于任何系统来说都是一个好建议,包括Redis。但是,由于我们经常跟简单的数据结构打交道,我们也需要多次访问才能达到目的。刚开始我们可能不适应,但对比以前的方法这种代价还是值得的。

           6,小结

尽管我们没怎么实际操作Redis,但我们已经了解了很多必要的知识。可能有些地方还不是很清楚,不要紧,接下来的章节你可能会不经意间发现答案。

本章重要内容如下:

.key是识别value数据的一个字符串标示。

.对Redis而言,value只是一系列字节,不管是何种格式。

.Redis有五种特殊的数据结构。

.综上所述,Redis即快又易用。但并不适合所有场合。

 

 

 

     第二章   数据结构

   接下来我们开始学习五种数据结构。我们会解释每一种数据结构,涉及到的方法,以及它使用的场景。

迄今为止我们还没有接触数据结构的概念。当我们使用“set”命令的时候,Redis怎么会知道我们使用哪种数据结构呢?其实每条命令都是针对特定的一种数据结构。例如,当你使用“set”的时候,针对的就是string这种数据结构。,当你使用“hset”的时候就是针对hash。

各种数据结构详细的方法本书就不再一一列举,感兴趣的可以自行查阅手册。

不过,任何时候,你都可以用“flushdb”来清除所有数据。

1,       Strings

Strings是Redis中最基本的数据结构。当你想到key_value对的时候,正是String结构。不要被他的名字迷惑,value值可以是任何形式。

我们已经见过常用的形式了。下面的形式是我们以后会经常用到的:

Setusers:leto ‘{“name”:leto,”palnet”:dune,”likes”:[“spice”]}’

另外,Redis提供一些普遍的操作方法。例如, strlen<key> 用于获取某个key对应的value的长度; getrange<key> <start><end> 返回value对应范围的值; append <key><value>将value加到对应的value值后面。

示例如下:


现在,你也许会说,很好,但是这也没什么用啊。你不能有意义的拉出JSON中的值以及附加value值啊。的确,本节内容仅仅是讲解一些命令,尤其是对于string的。

前面的时候我们说过Redis是不关心values值的形式的。这句话大部分情况下是正确的。然而,有些针对String的命令对value的类型还是敏感的。例如 incr,incrby,decr,decrby.示例如下:


试一下 incr users:leto,会返回一个错误。

2, Hashes

   

 

作者:u012327100 发表于2014-11-3 14:05:52 原文链接
阅读:72 评论:0 查看评论

相关 [redis 经典 the] 推荐:

Redis入门经典——The Little Redis Book (翻译)

- - CSDN博客架构设计推荐文章
你可以随意转载,复制,但请你注明作者,Karl Seguin. 关于作者:Karl 同志是广大屌丝IT码农中的一员. 但经验丰富,不仅活好而且跨领域甚广. 闲暇之余,跟笔者一样闲的蛋疼,写了几本小书. 没想到还挺受欢迎,特别是The Little MongoDb Book,风靡码农界. 更多资讯看他的个人博客http://openmymind.net.

Redis 负载监控——redis-monitor

- - ITeye资讯频道
redis-monitor是一个Web可视化的 redis 监控程序. 使用 Flask 来开发的,代码结构非常简单,适合移植到公司内网使用. redis 服务器信息,包括 redis 版本、上线时间、 os 系统信息等等. 实时的消息处理信息,例如处理 command 数量、连接总数量等. 内存占用、 cpu 消耗实时动态图表.

Redis 起步

- - 博客园_首页
Rdis和JQuery一样是纯粹为应用而产生的,这里记录的是在CentOS 5.7上学习入门文章:. Redis是一个key-value存储系统. 和Memcached类似,但是解决了断电后数据完全丢失的情况,而且她支持更多无化的value类型,除了和string外,还支持lists(链表)、sets(集合)和zsets(有序集合)几种数据类型.

redis 配置

- - 谁主沉浮
# 当配置中需要配置内存大小时,可以使用 1k, 5GB, 4M 等类似的格式,其转换方式如下(不区分大小写). # 内存配置大小写是一样的.比如 1gb 1Gb 1GB 1gB. # daemonize no 默认情况下,redis不是在后台运行的,如果需要在后台运行,把该项的值更改为yes. # 当redis在后台运行的时候,Redis默认会把pid文件放在/var/run/redis.pid,你可以配置到其他地址.

Cassandra代替Redis?

- - Tim[后端技术]
最近用Cassandra的又逐渐多了,除了之前的360案例,在月初的QCon Shanghai 2013 篱笆网也介绍了其使用案例. 而这篇 百万用户时尚分享网站feed系统扩展实践文章则提到了Fashiolista和Instagram从Redis迁移到Cassandra的案例. 考虑到到目前仍然有不少网友在讨论Redis的用法问题,Redis是一个数据库、内存、还是Key value store?以及Redis和memcache在实际场景的抉择问题,因此简单谈下相关区别.

redis 部署

- - CSDN博客云计算推荐文章
一、单机部署 tar xvf redis-2.6.16.tar.gz cd redis-2.6.16 make make PREFIX=/usr/local/redis install  #指定安装目录为/usr/local/redis,默认安装安装到/usr/local/bin. # chkconfig: 2345 80 10       #添加redhat系列操作系统平台,开机启动需求项(运行级别,开机时服务启动顺序、关机时服务关闭顺序) # description:  Starts, stops redis server.

nagios 监控redis

- - C1G军火库
下载check_redis.pl. OK: REDIS 2.6.12 on 192.168.0.130:6379 has 1 databases (db0) with 49801 keys, up 3 days 14 hours - connected_clients is 1, blocked_clients is 0 | connected_clients=1 blocked_clients=0.

转 redis vs memcached

- - 数据库 - ITeye博客
传统MySQL+ Memcached架构遇到的问题.   实际MySQL是适合进行海量数据存储的,通过Memcached将热点数据加载到cache,加速访问,很多公司都曾经使用过这样的架构,但随着业务数据量的不断增加,和访问量的持续增长,我们遇到了很多问题:.   1.MySQL需要不断进行拆库拆表,Memcached也需不断跟着扩容,扩容和维护工作占据大量开发时间.

Redis优化

- - 数据库 - ITeye博客
键名:尽量精简,但是也不能单纯为了节约空间而使用不易理解的键名. 键值:对于键值的数量固定的话可以使用0和1这样的数字来表示,(例如:male/female、right/wrong). 当业务场景不需要数据持久化时,关闭所有的持久化方式可以获得最佳的性能,不过一般都要持久化比较安全,而且是快照和aof同时使用比较安全.

笔记--redis

- - 移动开发 - ITeye博客
接着准备面试内容,今天学习了下redis,继续我的笔记加深印象. 1.为什么要使用redis.  答:主要是 性能和 并发两个方面,另外redis也可以做分布式锁和消息队列等其他功能. 但是如果只是为了分布式锁这些其他功能,完全还有其他中间件(如zookpeer等)代替,并不是非要使用redis.