Redis学习笔记.doc

上传人:壹****1 文档编号:563499632 上传时间:2023-07-10 格式:DOC 页数:67 大小:105.05KB
返回 下载 相关 举报
Redis学习笔记.doc_第1页
第1页 / 共67页
Redis学习笔记.doc_第2页
第2页 / 共67页
Redis学习笔记.doc_第3页
第3页 / 共67页
Redis学习笔记.doc_第4页
第4页 / 共67页
Redis学习笔记.doc_第5页
第5页 / 共67页
点击查看更多>>
资源描述

《Redis学习笔记.doc》由会员分享,可在线阅读,更多相关《Redis学习笔记.doc(67页珍藏版)》请在金锄头文库上搜索。

1、Redis学习手册原作者:Stephen Liu.编辑:杨祥宇文中的内容和数据主要来自于Redis官方文档,作者仅仅是根据自己的经验对常用的内容做了进一步的解释和归纳。有兴趣的网友也可以直接阅读Redis的官方文档。由于作者的翻译和理解能力有限,如有不到之处,欢迎指正。最后需要说的是,如果这个系列的博客能够让您在阅读后有所收获,那么就请继续关注作者后面有关新主题的系列博客。目录PHP学习手册1Redis学习手册(开篇)3一、简介:3二、Redis的优势:3三、目前版本中Redis存在的主要问题:4四、和关系型数据库的比较:4五、如何持久化内存数据:4Redis学习手册(String数据类型)5

2、一、概述:5二、相关命令列表:5三、命令示例:8Redis学习手册(List数据类型)14一、概述:14二、相关命令列表:14三、命令示例:17四、链表结构的小技巧:21Redis学习手册(Set数据类型)22一、概述:22二、相关命令列表:22三、命令示例:24四、应用范围:27Redis学习手册(Hashes数据类型)28一、概述:28二、相关命令列表:28三、命令示例:30Redis学习手册(Sorted-sets数据类型)32一、概述:32二、相关命令列表:32三、命令示例:36四、应用范围:39Redis学习手册(Key操作命令)39一、概述:39二、相关命令列表:39三、命令示例:

3、42Redis学习手册(事物)45一、概述:45二、相关命令列表:46三、命令示例:47四、WATCH命令和基于CAS的乐观锁:48Redis学习手册(主从复制)49一、Redis的Replication:49二、Replication的工作原理:50三、如何配置Replication:50四、应用示例:51Redis学习手册(持久化)52一、Redis提供了哪些持久化机制:52二、RDB机制的优势和劣势:52三、AOF机制的优势和劣势:52四、其它:53Redis学习手册(虚拟内存)54一、简介:54二、应用场景:54三、配置:55Redis学习手册(管线)56一、请求应答协议和RTT:56

4、二、管线(pipelining):56三、Benchmark:57Redis学习手册(服务器管理)58一、概述:58二、相关命令列表:58Redis学习手册(内存优化)61一、特殊编码:61二、BIT和Byte级别的操作:61三、尽可能使用Hash:61Redis学习手册(实例代码)62Redis学习手册(开篇)一、简介: 在过去的几年中,NoSQL数据库一度成为高并发、海量数据存储解决方案的代名词,与之相应的产品也呈现出雨后春笋般的生机。然而在众多产品中能够脱颖而 出的却屈指可数,如Redis、MongoDB、BerkeleyDB和CouchDB等。由于每种产品所拥有的特征不同,因此它们的应

5、用场景也存在着一 定的差异,下面仅给出简单的说明: 1). BerkeleyDB是一种极为流行的开源嵌入式数据库,在更多情况下可用于存储引擎,比如BerkeleyDB在被Oracle收购之前曾作为 MySQL的存储引擎,由此可以预见,该产品拥有极好的并发伸缩性,支持事务及嵌套事务,海量数据存储等重要特征,在用于存储实时数据方面具有极高的可用 价值。然而需要指出的是,该产品的Licence为GPL,这就意味着它并不是在所有情况下都是免费使用的。 2). 对MongoDB的定义为Oriented-Document数据库服务器,和BerkeleyDB不同的是该数据库可以像其他关系型数据库服务器那样独

6、 立的运行并提供相关的数据服务。从该产品的官方文档中我们可以获悉,MongoDB主要适用于高并发的论坛或博客网站,这些网站具有的主要特征是并发访问 量高、多读少写、数据量大、逻辑关系简单,以及文档数据作为主要数据源等。和BerkeleyDB一样,该产品的License同为GPL。 3). Redis,典型的NoSQL数据库服务器,和BerkeleyDB相比,它可以作为服务程序独立运行于自己的服务器主机。在很多时候,人们只是将 Redis视为Key/Value数据库服务器,然而事实并非如此,在目前的版本中,Redis除了Key/Value之外还支持List、Hash、 Set和Ordered S

7、et等数据结构,因此它的用途也更为宽泛。对于此种误解,Redis官网也进行了相应的澄清。和以上两种产品不同的是,Redis的License是 Apache License,就目前而言,它是完全免费。 4). memcached,数据缓存服务器。为什么在这里要给出该产品的解释呢?很简单,因为笔者认为它在使用方式上和Redis最为相似。毕竟这是一篇关于 Redis的技术系列博客,有鉴于此,我们将简要的对比一下这两个产品。首先说一下它们之间的最大区别,memcached只是提供了数据缓存服务,一旦 服务器宕机,之前在内存中缓存的数据也将全部消失,因此可以看出memcached没有提供任何形式的数据持

8、久化功能,而Redis则提供了这样的功能。 再有就是Redis提供了更为丰富的数据存储结构,如Hash和Set。至于它们的相同点,主要有两个,一是完全免费,再有就是它们的提供的命令形式极为 接近。二、Redis的优势: 1). 和其他NoSQL产品相比,Redis的易用性极高,因此对于那些有类似产品使用经验的开发者来说,一两天,甚至是几个小时之后就可以利用Redis来搭建自己的平台了。 2). 在解决了很多通用性问题的同时,也为一些个性化问题提供了相关的解决方案,如索引引擎、统计排名、消息队列服务等。三、目前版本中Redis存在的主要问题: 1). 在官方版本中没有提供Windows平台的支持

9、,已发布的正式版本中只是支持类Unix和MacOSX平台。 2). 没有提供集群的支持,然而据官网所述,预计在2.6版本中会加入该特征。 3). Publication/Subscription功能中,如果master宕机,slave无法自动提升为master。四、和关系型数据库的比较: 在目前版本(2.4.7)的Redis中,提供了对五种不同数据类型的支持,其中只有一种类型,既string类型可以被视为Key-Value结构,而其他的数据类型均有适用于各自特征的应用场景,至于具体细节我们将会在该系列后面的博客中予以说明。 相比于关系型数据库,由于其存储结构相对简单,因此Redis并不能对复杂

10、的逻辑关系提供很好的支持,然而在适用于Redis的场景中,我们却可以由此而 获得效率上的显著提升。即便如此,Redis还是为我们提供了一些数据库应该具有的基础概念,如:在同一连接中可以选择打开不同的数据库,然而不同的 是,Redis中的数据库是通过数字来进行命名的,缺省情况下打开的数据库为0。如果程序在运行过程中打算切换数据库,可以使用Redis的select 命令来打开其他数据库,如select 1,如果此后还想再切换回缺省数据库,只需执行select 0即可。 在数据存储方面,Redis遵循了现有NoSQL数据库的主流思想,即Key作为数据检索的唯一标识,我们可以将其简单的理解为关系型数据

11、库中索引的键, 而Value则作为数据存储的主要对象,其中每一个Value都有一个Key与之关联,这就好比索引中物理数据在数据表中存储的位置。在Redis 中,Value将被视为二进制字节流用于存储任何格式的数据,如Json、XML和序列化对象的字节流等,因此我们也可以将其想象为RDB中的BLOB类 型字段。由此可见,在进行数据查询时,我们只能基于Key作为我们查询的条件,当然我们也可以应用Redis中提供的一些技巧将Value作为其他数据的 Key,这些知识我们都会在后面的博客中予以介绍。五、如何持久化内存数据: 缺省情况下,Redis会参照当前数据库中数据被修改的数量,在达到一定的阈值后会

12、将数据库的快照存储到磁盘上,这一点我们可以通过配置文件来设定该阈 值。通常情况下,我们也可以将Redis设定为定时保存。如当有1000个以上的键数据被修改时,Redis将每隔60秒进行一次数据持久化操作。缺省设 置为,如果有9个或9个以下数据修改是,Redis将每15分钟持久化一次。 从上面提到的方案中可以看出,如果采用该方式,Redis的运行时效率将会是非常高效的,既每当有新的数据修改发生时,仅仅是内存中的缓存数据发生改变, 而这样的改变并不会被立即持久化到磁盘上,从而在绝大多数的修改操作中避免了磁盘IO的发生。然而事情往往是存在其两面性的,在该方法中我们确实得到了效 率上的提升,但是却失去

13、了数据可靠性。如果在内存快照被持久化到磁盘之前,Redis所在的服务器出现宕机,那么这些未写入到磁盘的已修改数据都将丢失。 为了保证数据的高可靠性,Redis还提供了另外一种数据持久化机制-Append模式。如果Redis服务器被配置为该方式,那么每当有数据修改发生 时,都会被立即持久化到磁盘。Redis学习手册(String数据类型)一、概述:字符串类型是Redis中最为基础的数据存储类型,它在Redis中是二进制安全的,这便意味着该类型可以接受任何格式的数据,如JPEG图像数据或Json对象描述信息等。在Redis中字符串类型的Value最多可以容纳的数据长度是512M。二、相关命令列表:

14、命令原型时间复杂度命令描述返回值APPEND key valueO(1)如果该Key已经存在,APPEND命令将参数Value的数据追加到已存在Value的末尾。如果该Key不存在,APPEND命令将会创建一个新的Key/Value。追加后Value的长度。DECR key O(1)将指定Key的Value原子性的递减1。如果该Key不存在,其初始值为0,在decr之后其值为-1。如果Value的值不能转换为整型值,如Hello,该操作将执行失败并返回相应的错误信息。注意:该操作的取值范围是64位有符号整型。递减后的Value值。INCR keyO(1)将指定Key的Value原子性的递增1。

15、如果该Key不存在,其初始值为0,在incr之后其值为1。如果Value的值不能转换为整型值,如Hello,该操作将执行失败并返回相应的错误信息。注意:该操作的取值范围是64位有符号整型。递增后的Value值。DECRBY key decrement O(1) 将指定Key的Value原子性的减少decrement。如果该Key不存在, 其初始值为0,在decrby之后其值为-decrement。如果Value的值不能转换为整型值,如Hello,该操作将执行失败并返回相应的错误信 息。注意:该操作的取值范围是64位有符号整型。减少后的Value值。INCRBY key increment O(1)将指定Key的Value原子性的增加increment。如果该Key不存在, 其初始值为0,在incrby之后其值为increment。如果Value的值不能转换为整型值,如Hello,该操作将执行失败并返回相应的错误信 息。注意:该操作的取值范围是64位有符号整型。增加后的Value值。GET key

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 生活休闲 > 社会民生

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号