redis七大特性简介.doc_第1页
redis七大特性简介.doc_第2页
redis七大特性简介.doc_第3页
redis七大特性简介.doc_第4页
redis七大特性简介.doc_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

redis七大特性简介Redis是一个开源的、高级的键值对存储系统,经常被用作数据结构服务器,因为其支持字符串、Hash、列表、集合和有序集合等数据结构。在Laravel中使用Redis之前,需要通过Composer安装predis/predis包:composer require predis/predis配置应用的Redis配置位于配置文件config/database.php。在这个文件中,可以看到包含被应用使用的Redis服务器的redis数组:redis = cluster = false, default = host = 127.0.0.1, port = 6379, database = 0, ,默认服务器配置可以满足开发需要,不过,你可以基于自己的环境修改该数组。配置文件中定义的每个Redis服务器需要一个名字并指定该Redis服务器使用的主机和接口。cluster选项告知Laravel Redis 客户端在多个Redis节点间执行客户端分片,从而形成节点池并创建大量有效的RAM。然而,客户端分片并不处理故障转移,所以,非常适合从另一个主数据存储那里获取有效的缓存数据。此外,你可以在Redis连接定义中定义options数组值,从而允许你指定一系列Predis客户端选项。如果Redis服务器要求认证信息,你可以通过添加password配置项到Redis服务器配置数组来提供密码。注意:如果你通过PECL安装PHP的Redis扩展,需要在config/app.php文件中修改Redis的别名。一、Redis七种特性Redis的几种使用方式Strings、Hashs、Lists、Sets、SortedSets、Pub/Sub、Transactions也比作七种武器,为大家讲解Redis的七种特性,并列举其适合的应用场景。1.Strings(字符串)Redis字符串是一个字节序列。在Redis中字符串是二进制安全的,这意味着它们没有任何特殊终端字符来确定长度,所以可以存储任何长度为512兆的字符串。Strings 数据结构是简单的key-value类型,value其实不仅是String,也可以是数字。使用Strings类型,你可以完全实现目前 Memcached 的功能,并且效率更高。还可以享受Redis的定时持久化,操作日志及 Replication等功能。除了提供与 Memcached 一样的get、set、incr、decr 等操作外,Redis还提供了下面一些操作:获取字符串长度往字符串append内容设置和获取字符串的某一段内容设置及获取字符串的某一位(bit)批量设置一系列字符串的内容2.Hashs(哈希)Redis哈希是键值对的集合。Redis哈希是字符串字段和字符串值之间的映射,所以它们用来表示对象。在Memcached中,我们经常将一些结构化的信息打包成hashmap,在客户端序列化后存储为一个字符串的值,比如用户的昵称、年龄、性别、积分等,这时候在需要修改其中某一项时,通常需要将所有值取出反序列化后,修改某一项的值,再序列化存储回去。这样不仅增大了开销,也不适用于一些可能并发操作的场合(比如两个并发的操作都需要修改积分)。而Redis的Hash结构可以使你像在数据库中Update一个属性一样只修改某一项属性值。3.Lists(链表)Redis列表是简单的字符串列表,通过插入顺序排序。可以添加一个元素到Redis列表的头部或尾部。相信略有数据结构知识的人都应该能理解其结构。使用Lists结构,我们可以轻松地实现最新消息排行等功能。Lists的另一个应用就是消息队列,可以利用Lists的PUSH操作,将任务存在Lists中,然后工作线程再用POP操作将任务取出进行执行。Redis还提供了操作Lists中某一段的api,你可以直接查询,删除Lists中某一段的元素。4.Sets(集合)Sets 就是一个集合,集合的概念就是一堆不重复值的组合。利用Redis提供的Sets数据结构,可以存储一些集合性的数据,比如在微博应用中,可以将一个用户所有的关注人存在一个集合中,将其所有粉丝存在一个集合。Redis还为集合提供了求交集、并集、差集等操作,可以非常方便的实现如共同关注、共同喜好、二度好友等功能,对上面的所有集合操作,你还可以使用不同的命令选择将结果返回给客户端还是存集到一个新的集合中。4.Sorted Sets(有序集合)和Sets相比,Sorted Sets增加了一个权重参数score,使得集合中的元素能够按score进行有序排列,比如一个存储全班同学成绩的Sorted Sets,其集合value可以是同学的学号,而score就可以是其考试得分,这样在数据插入集合的时候,就已经进行了天然的排序。另外还可以用Sorted Sets来做带权重的队列,比如普通消息的score为1,重要消息的score为2,然后工作线程可以选择按score的倒序来获取工作任务。让重要的任务优先执行。Redis的有序集合类似于Redis的集合,但是存储的值在集合中具有唯一性。另外有序集合的每个成员都使用分值(score)的东西,这个分值就是用于将有序集合排序,从分值最小到最大来排序。在Redis有序集合添加,删除和测试成员的存在的时间复杂度为O(1)(恒定时间,无论集合内包含元素的数量)。列表的最大长度为232- 1个元素(4294967295,每个集合的元素超过四十亿)。5.Pub/Sub(Redis发布订阅)Pub/Sub 从字面上理解就是发布(Publish)与订阅(Subscribe),在Redis中,你可以设定对某一个key值进行消息发布及消息订阅,当一个key值上进行了消息发布后,所有订阅它的客户端都会收到相应的消息。这一功能最明显的用法就是用作实时消息系统,比如普通的即时聊天,群聊等功能。Redis订阅和发布实现了通讯系统,发件人(在Redis中的术语称为发布者)发送邮件,而接收器(订户)接收它们。信息传输的链路称为通道。Redis一个客户端可以订阅任意数量的通道。示例6.Transactions(Redis事务)谁说NoSQL都不支持事务,虽然Redis的Transactions提供的并不是严格的ACID的事务(比如一串用EXEC提交执行的命令,在执行中服务器宕机,那么会有一部分命令执行了,剩下的没执行),但是这个Transactions还是提供了基本的命令打包执行的功能(在服务器不出问题的情况下,可以保证一连串的命令是顺序在一起执行的,中间有会有其它客户端命令插进来执行)。Redis还提供了一个Watch功能,你可以对一个key进行Watch,然后再执行Transactions,在这过程中,如果这个Watched的值进行了修改,那么这个Transactions会发现并拒绝执行。Redis事务允许一组命令在单一步骤中执行。事务有两个属性,说明如下:在一个事务中的所有命令作为单个独立的操作顺序执行。在Redis事务中的执行过程中而另一客户机发出的请求,这是不可以的;Redis事务是原子的。原子意味着要么所有的命令都执行,要么都不执行;二、Redis使用示范1.Redis HyperLogLog Redis HyperLogLog 是用来做基数统计的算法,HyperLogLog 的优点是,在输入元素的数量或者体积非常非常大时,计算基数所需的空间总是固定 的、并且是很小的。在 Redis 里面,每个 HyperLogLog 键只需要花费 12 KB 内存,就可以计算接近 264 个不同元素的基 数。这和计算基数时,元素越多耗费内存就越多的集合形成鲜明对比。但是,因为 HyperLogLog 只会根据输入元素来计算基数,而不会储存输入元素本身,所以 HyperLogLog 不能像集合那样,返回输入的各个元素。示例下面的例子说明了HyperLogLogRedis的工作原理:redis 127.0.0.1:6379 PFADD tutorials redis1) (integer) 1redis 127.0.0.1:6379 PFADD tutorials mongodb1) (integer) 1redis 127.0.0.1:6379 PFADD tutorials mysql1) (integer) 1redis 127.0.0.1:6379 PFCOUNT tutorials(integer) 32.Redis键Redis中的keys命令用于管理redis中的键。Rediskeys命令使用的语法如下所示:语法redis 127.0.0.1:6379 COMMAND KEY_NAME示例redis 127.0.0.1:6379 SET yiibai redisOKredis 127.0.0.1:6379 DEL yiibai(integer) 1在上面的例子中DEL是一个命令,而yiibai是一个键。如果键被成功删除,则该命令的输出将是(整数)1,否则这将是(整数)0;3.Redis脚本Redis脚本是使用Lua解释脚本用来评估(计算)。从Redis2.6.0版本开始内置这个解释器。命令EVAL用于执行脚本命令。语法EVAL命令的基本语法如下:redis 127.0.0.1:6379 EVAL script numkeys key key . arg arg .示例下面的例子说明了Redis脚本是如何工作的:redis 127.0.0.1:6379 EVAL return KEYS1,KEYS2,ARGV1,ARGV2 2 key1key2 first second1) key12) key23) first4) second3.Redis备份Redis的SAVE命令用于创建当前Redis数据库的备份。语法Redis 的 SAVE 命令的基本语法如下所示:127.0.0.1:6379 SAVE示例以下示例显示了如何在Redis的当前数据库中创建备份。127.0.0.1:6379 SAVE OK在执行此命令之后,将在redis目录中创建一个dump.rdb文件。恢复Redis数据要恢复redis数据只需要要将Redis的备份文件(dump.rdb)放到Redis的目录中,并启动服务器。要了解知道Redis目录在什么位置,可使用CONFIG命令,如下所示:127.0.0.1:6379 CONFIG get dir1) dir2) /user/yiibai/redis-2.8.13/src在上面的命令命令输出为/user/yiibai/redis-2.8.13/src就是使用的Redis目录,也就是Redis的服务器安装的目录。4.Bgsave创建Redis的备份也可以使用备用命令BGSAVE。此命令将启动备份过程,并在后台运行此。示例127.0.0.1:6379 BGSAVE Background saving startedRedis安全Redis数据库可以配置安全保护的,所以任何客户端在连接执行命令时需要进行身份验证。为了确保Redis的安全,需要在配置文件设置密码。示例下面给出的例子显示的步骤是用来确保Redis实例的安全。127.0.0.1:6379 CONFIG get requirepass 1) requirepass 2) 默认情况下此属性是空的,这意味着此实例没有设置密码。可以通过执行以下命令来修改设置此属性127.0.0.1:6379 CONFIG set requirepass yiibaipassOK127.0.0.1:6379 CONFIG get requirepass1) requirepass2) yiibaipass如果客户端运行命令无需验证设置密码,那么(错误)NOAUTH需要验证。错误将返回。因此,客户端需要使用AUTH命令来验证自己的身份信息。语法AUTH命令的基本语法如下所示:127.0.0.1:6379 AUTH password5.Redis性能测试Redis的基准性能测试是通过同时运行N个命令以检查Redis性能的工具。语法Redis的基准测试的基本语法如下所示:redis-benchmark option option value示例下面给出的示例是通过调用100000个(次)命令来检查Redis。redis-benchmark -n 100000PING_INLINE: 141043.72 requests per secondPING_BULK: 142857.14 requests per secondSET: 141442.72 requests per secondGET: 145348.83 requests per secondINCR: 137362.64 requests per secondLPUSH: 145348.83 requests per secondLPOP: 146198.83 requests per secondSADD: 146198.83 requests per secondSPOP: 149253.73 requests per secondLPUSH (needed to benchmark LRANGE): 148588.42 requests per secondLRANGE_100 (first 100 elements): 58411.21 requests per secondLRANGE_300 (first 300 elements): 21195.42 requests per secondLRANGE_500 (first 450 elements): 14539.11 requests per secondLRANGE_600 (first 600 elements): 10504.20 requests per secondMSET (10 keys): 93283.58 requests per second6.Redis客户端连接如果启用了Redis的接受配置监听,客户端可在TCP端口上与Unix套接字连接。以下操作执行后新的客户端连接被服务器接受:客户端套接字在非阻塞状态,因为Redis使用复用和非阻塞I/O;TCP_NODELAY选项设定以确保不会在连接时延迟;创建一个可读的文件事件,以便Redis能够尽快收集客户端查询作为新的数据可被套接字读取;客户端最大连接数量在Redis的配置文件(redis.conf)有一个属性maxclients,它描述了可以连接到Redis的客户的最大数量。命令的基本语法是:config get maxclients1) maxclients2) 10000默认情况下此属性设置为10000(取决于OS的文件标识符限制最大数量),但可以修改这个属性。示例在下面给出的例子我们已经设置客户端最大连接数量为100000,在之后启动服务器:redis-server -maxclients 1000007.Redis管道Redis是一个TCP服务器,支持请求/响应协议。在redis中一个请求完成以下步骤:客户端发送一个查询给服务器,并从套接字中读取,通常服务器的响应是在一个封闭的方式;服务器处理命令并将响应返回给客户端;管道的含义求给服务器,而不等待全部响应,最后在单个步骤中读取所有响应。管道的基本含义是:客户端可以发送多个请示例要检查Redis管道只需要启动Redis实例,并在终端输入以下命令。$(echo -en PINGrn SET tutorial redisrnGET tutorialrnINCR visitorrnINCRvisitorrnINCR visitorrn; sleep 10) | nc localhost 6379+PONG+OKredis:1:2:3在上面的例子所示,了解使用PING命令连接Redis,之后我们在Redis设定一个名为tutorial字符串值,之后拿到这个键对应的值并增加访问人数的三倍。在结果中,我们可以看到所有的命令都提交给Redis一次,Redis是给单步输出所有命令。通道的好处这种技术的好处是显着提高协议的性能。管道localhost获得至少达到百倍的网络连接速度。好了,本文就先说到这里,上面这些这只是Redis API的一些使用方式,可谓冰山一角,Redis就像一把瑞士军刀一样(或者是更万能的中国军铲),它创造了一系列更接近于应用场景的数据结构和API,目的在于让我们更直接的基于应

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论