Redis在WEB开发中的应用与实践

一、Redis概述:

Redis是一个功能强大、性能高效的开源数据结构服务器,Redis最典型的应用是NoSQL。但事实上Redis除了作为NoSQL数据库使用之外,还能广泛应用消息队列,数据堆栈以及数据缓存等众多场合。Redis与Memcached相类似,都是以键值对(key-value)存放数据的,但是Redis支持的数据类型及特性远比Memcached丰富。

在缓存应用方面,Redis同样也是一个内存数据库,拥有Memcached的快速、稳定等特性,并且支持数据快照功能,开发人员可以通过配置文件制定数据快照时间间隔,Redis会将数据快照自动存放于硬盘中,这样就算服务器突然停止服务,Redis也极少会出现丢失数据的现象。所以近些年来越来越多的大型物联网公司开始使用Rdeis作为缓存服务器。

相比于MongoDB,Redis是更加彻底的Key-Value存储系统,它没有专门的查询语言,也没有明确的数据类型。一个字符串,可以代替所有的储存类型,例如直接使用string类型存放传统文本、代码、序列等;也可以直接存放数据流,例如图片、视频等,并且没有数据大小的限制。虽然没有数据类型的限制,单位了方便数据管理,Redis提供了多种数据结构类型,分别为string(字符串)、list(列表)、sets(集合)或者是ordered sets(有序集合)。所有的数据类型都支持push/pop、add/remove、服务端并集、交集、sets集合差别等操作,这些操作都具有原子性的,Redis还支持各种不同的排序功能。

与Memcached一样,Redis的储存方式给予内存的,所有的数据读写都在内存中完成。单Memcache使用的libevent库,而Redis则原生使用epoll异步通信模型,所以在性能上比Memcache更加优秀。同时,Redis还提供了Virtual Memory功能,使得数据能够在指定间隔时间内保存到硬盘(由后台自动完成),避免数据在内存中丢失。

与MongoDB一样,虽然统称为NoSQL,但Redis无论在使用方式上,还是数据处理流程上都有较大的区别。MySQL、Redis、MongoDB、Memcache之间的属性对比如表1所示:

表1 储存属性概念


数据库


数据库


数据表


字段


MySQL




字段、列


Redis



Key



MongoDB



集合


文档属性


Memcached



Key


与MongoDB相比,Redis主要优点分别如下:

? Redis数据储存在内存中完成,所以在数度上比较有优势,MongoDB使用memory-mapped处理方式本质上还是磁盘操作

? Redis与MongoDB在设计之初均考虑到分布式处理能力,所以这两者都提供了集群部署配置接口,但相对而言Redis及全部输更加容积及稳定。

? Redis提供了简单的事务支持,MongoDB不支持事务。

Redis并非只有有点,也有缺点,这些缺点是明显的,分别如下:

? Redis没有字段的概念,所以在数据查询上功能比较弱,支持的特性比较简单。

? Redis单个value的最大容量可达1GB,虽然MongoDB单个文档最大容量为16MB,但MongoDB提供了GridFS用于实现超大文件存储。

? 由于Redis本质上是一个内存书库,所以内存硬件的容量大小直接决定了Redis可用的数据库空间(Redis2.0新增了Virtual Memory功能解决了容量问题,但虚拟内存本质上就是磁盘)。

? Redis虽然在内存中查询数据,但为了确保数据的安全,Redis默认情况下使用子线程对数据进行持久化处理,如果配置不当(默认刷新间隔为20秒),将会是系统运行效率适得其反。

? MongoDB提供了mapreduce数据分析功能,Redis则没有数据分析功能。

随着大数据的爆发,无论是Redis还是MongoDB,都将会迎来越来越多的功能更新,选择哪一个作为NoSQL数据库,要看项目需要及开发人员技术水平。现在对这两种数据库进行总结及对比还为时过早。而Memcache已经好久没更新了,所以无论从性能、功能还是后续更新考虑,Redis都是Memcach的理想替代品,除此之外Redis还非常适用于以下场合:

(1)  海量的简单读写

根据Redis官方的测试结果,在50个并发的情况下请求10万次,写的书都市11000次/s,读的速度是81000次/s。所以用于处理类似于微博热点事件、交单排序、关注排行之类实时但功能单一的局部应用是最理想的

(2)  实时的反垃圾系统

反垃圾系统通常都是基于关键词的,使用Redis储存关系词,能够利用Redis的高性能,为监控系统提供稳定及精确的实时监控功能,典型的由邮件系统、评论系统等。

(3)  公开的统计系统

利用Redis的简单易用的群体部署功能,能够轻易地开发大规模的统计系统,例如广告系统、万展统计系统、简单的股市分析系统等。

(4)  消息队列

消息队列是提高关系型数据库数据插入的有效手段,Redis是NoSQL中为数不多支持消息队列的数据库。常用的应有由网站邮件、站内短信、品论系统等。

(5)  消息堆栈系统

消息堆栈与消息队列在处理顺序上是相反的,消息队列的规则为先进先出;而消息堆栈则是先进后出。典型的应用有论坛回帖排序等。

(6)  日志或缓存系统

Virtual Memory功能非常适用于存放安全日志、网站日志以及数据缓存等。国内的新浪微博所构建的缓存系统是全球最大的Redis缓存系统。

二、Redis的安装(linux下安装)

1、下载Redis:地址是http://www.redis.io/download,这里使用的是版本3.0.5

2、安装Redis,下载完成后,就可以安装Redis,在安装之前需要确保当前平台已经安装编译工具:

[[email protected] data]# tar zxvf redis-3.0.5.tar.gz

[[email protected] data]# cd redis-3.0.5

[[email protected] src]# make

[[email protected] redis-3.0.5]# cd src/

[[email protected] src]# make install

安装完成后,创建/usr/local/redis/bin目录,并将Redis客户端复制到该目录下,便于操作与管理:

[[email protected] src]# mkdir -p /usr/local/redis/bin

[[email protected] src]# mkdir -p /usr/local/redis/etc

[[email protected] src]# cp -pf redis-benchmark /usr/local/redis/bin/

[[email protected] src]# cp -pf redis-cli /usr/local/redis/bin/

[[email protected] src]# cp -pf redis-check-dump /usr/local/redis/bin/

[[email protected] src]# cp -pf redis-check-aof /usr/local/redis/bin/

[[email protected] src]# cp -pf redis-server /usr/local/redis/bin/

[[email protected] src]# cp -pf ../redis.conf /usr/local/redis/etc/

3、启动Redis

同样,在linux系统下启动Redis时需要指定配置文件,只需要将配置项daemonize设为true即可,该选项可以把Redis推送到后台运行,操作如下:

保存redis.conf配置文件,启动Redis,操作如下:

[[email protected] ~]# /usr/local/redis/bin/redis-server /usr/local/redis/etc/redis.conf

启动完成后,可以通过查看Redis注程序是否存在,以确定Redis是否安装成功。

Redis默认使用6379通信端口,可以使用netstat –anput命令检测Redis是否运行成功,如果开启了防火墙,需要允许6379端口通过。

4、安装Redis扩展

Redis是一个完善、功能强大且易容的NoSQL数据库,之所以能够被广泛使用,与Redis官方提供稳定、可靠的API分不开。Redis项目提供了包括Java、C#、C++、PHP、JavaScript等主流语言的API,可以在http://www.redis.io/clients下载相应的安装包。对于PHP而言,只下载PHP类文件或者为PHP解释引擎安装扩展模块即可,显然安装扩展模块更加方便。下载地址为http://github.com/nicolasff/phpredis

在linux下安装phpredis扩展,使用PHP内置的phpize工具,可以很方便地为PHP引擎添加扩展模块。

(1)  下载phpredis

[[email protected] ~]# wget http://soft.beauty-soft.net/lib/phpredis-master.tar.gz

[[email protected] ~]# tar zxvf phpredis-master.tar.gz

[[email protected] ~]# cd phpredis-master

(2)  使用phpize工具安装phpredis

假设PHP安装的路径为/usr/local/php/,那么phpize的路径就位于/usr/local/php/bin/phpize,过程如下:

[[email protected] phpredis-master]# /usr/bin/phpize

[[email protected] phpredis-master]# ./configure --with-php-config=/usr/bin/php-config

[[email protected] phpredis-master]# make

[[email protected] phpredis-master]# make install

完成!

(3)  在配置文件中加入Redis扩展

最后只需要在php.ini配置文件中加入Redis扩展模块即可(php.ini路径可以通过phpinfo函数查看,通常为安装目录下的etc目录,例如:/usr/local/php/etc/)。

保存php.ini文件,重启Web服务器,整个安装流程就完成了,要检测是否安装成功,可以使用phpinfo函数检查是否存在Redis信息。

(4)  测试Redis

验证Redis数据库及phpredis扩展模块是否正确运行的最直接最有效的方法就是使用PHP代码进行测试,测试代码如下:

运行结果:

(5)  TP框架使用Redis

在ThinkPHP中使用Redis缓存驱动与使用其他缓存启动并没有区别,只需要在配置文件配置好与Redis的配置项,在使用时直接切换即可,与Redis相关的配置项如下:

? REDIS_HOST:Redis服务器IP地址,例如:127.0.0.1;

? REDIS_PORT:Redis服务器开放端口,默认6379;

? DATA_CACHE_TIME:缓存有效时间,默认为0不限制。

此外,还可以直接通过Cache中间件中的getInstance方法初始化Redis配置信息,如下所示:

结果:

这里的set和get方法不是phpredis模块中的方法(phpredis模块也含有set和get方法),而是Cache缓存中间件所提供的缓存统一处理方法。

总结

           从Redis的简介、安装到Redis的使用,再结合ThinkPHP框架的使用,可以考虑用Redis存储session来解决多台服务器共享session的问题。

时间: 2024-10-09 21:49:37

Redis在WEB开发中的应用与实践的相关文章

mongodb在WEB开发中的应用与实践

一.mongodb是什么? 一套高性能.易开发的文档型数据库.他使用键值对形式存放数据,能够存放包括字符串.数组.数据序列.图片.视频等在内的大多数数据文档.MongoDB完善的设计,搞笑的可编程性使其成为当前NoSQL产品最热门的一种. 二.NoSQL概述 1.全称Not Only SQL,指的是非关系型数据库.传统的关系型数据库是于SQL语言进行操作的,虽然在功能上足够强大,但由于一在局部上只需要简单的数据操作,传统的关系型数据库显得效率低下.随着Web2.0的到来,SNS应用的兴起,对数据

[Java Web]2\Web开发中的一些架构

1.企业开发架构: 企业平台开发大量采用B/S开发模式,不管采用何种动态Web实现手段,其操作形式都是一样的,其核心操作的大部分都是围绕着数据库进行的.但是如果使用编程语言进行数据库开发,要涉及很多诸如事务.安全等操作问题,所以现在开发往往要通过中间件进行过渡,即,程序运行在中间件上,并通过中间件进行操作系统的操作,而具体一些相关的处理,如事务.安全等完全由中间件来负责,这样程序员只要完成具体的功能开发即可. 2.Java EE架构: Java EE 是在 Java SE 的基础上构建的,.NE

Web开发中的18个关键性错误

前几年,我有机会能参与一些有趣的项目,并且独立完成开发.升级.重构以及新功能的开发等工作. 本文总结了一些PHP程序员在Web开发中经常 忽略的关键错误,尤其是在处理中大型的项目上问题更为突出.典型的错误表现在不能很好区分各种开发环境和没有使用缓存和备份等. 下面以PHP为例,但是其核心思想对每一个Web程序员都是适用的. 应用程序级别的错误 1.在开发阶段关闭了错误报告 我唯一想问的是:为什么?为什么在开发的时候要关闭错误报告? PHP有很多级别的错误报告,在开发阶段我们必须将它们全部开启.

Web 开发中 20 个很有用的 CSS 库

转自:http://www.oschina.net/translate/css-libraries-for-developers 在过去的几年中,CSS已经成为一大部分开发者和设计者的最爱,因为它提供了一系列功能和特性.每个月都有无数个围绕CSS的工具被开发者发布以简化WEB开发.像CSS 库,框架,应用这样的工具能够为开发者做很多事,而且可以使开发者创造出创新立异的WEB应用. 在这篇文件章中我们找到了一系列对开发者有用的CSS库,它们能帮助开发者在一定的期限内取得有创造性和创新性的成果.我们

Web 开发中很实用的10个效果【附源码下载】

在工作中,我们可能会用到各种交互效果.而这些效果在平常翻看文章的时候碰到很多,但是一时半会又想不起来在哪,所以养成知识整理的习惯是很有必要的.这篇文章给大家推荐10个在 Web 开发中很有用的效果,记得收藏:) 超炫的页面切换动画效果 今天我们想与大家分享一组创意的页面切换熊效果集合.我们已经在示例中罗列了一组动画,可以被应用到页面切换过程中,创造出很有趣的导航效果. 立即下载      在线演示 美!视差滚动在图片滑块中的应用 视差滚动(Parallax Scrolling)已经被广泛应用于网

Web开发中 前端路由 实现的几种方式和适用场景

浅析Web开发中前端路由实现的几种方式 主题 Web开发 故事从名叫Oliver的绿箭虾`说起,这位大虾酷爱社交网站,一天他打开了 Twitter ,从发过的tweets的选项卡一路切到followers选项卡,Oliver发现页面的内容变化了,URL也变化了,但为什么页面没有闪烁刷新呢?于是Oliver打开的网络监控器(没错,Oliver是个程序员),他惊讶地发现在切换选项卡时,只有几个XHR请求发生,但页面的URL却在对应着变化,这让Oliver不得不去思考这一机制的原因- 叙事体故事讲完,

如何OE开发中实现一个在web开发中的小效果

近期公司里面有一个需求,就是当业务人员点击订单列表中的某一条时希望打开一个新的窗口动作,然后把这一条记录中的某些值带过去,这样一个效果在web开发中很简单,或许就是分分钟的事情.但是在客户端这种开发中确实不易,尤其是OpenERP这种有诸多限制的框架里面. 那么如何实现呢? 这个地方我的想法主要分两步:1.打开一个新的窗口(Form视图的)2.把值带入到新的窗口里面. 第一步里面我按日常的操作在view里面创建一个向导(wizard),然后给name和id赋值,然后在创建一个wizard文件(名

WEB开发中常用的正则表达式集合

在计算机科学中,正则表达式用来描述或者匹配一系列符合某个句法规则的字符串的单个字符串.在WEB开发中,正则表达式通常用来检测.查找替换某些符合规则的字符串,如检测用户输入E-mai格式是否正确,采集符合规则的页面内容等等.今天我将分别用PHP和Javascript向大家介绍WEB开发中最常用最实用的正则表达式及其用法,正则表达式是一门学科,不可能使用一篇文章来讲解完,理论的东西网上很多,有兴趣的同学可以搜一大把.不过你也许没必要去埋头学习琢磨不透的正则表达式,看本文和实例给您呈现常用.实用的正则

WEB开发中的字符集和编码

html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,big,cite,code,del,dfn,em,img,ins,kbd,q,s,samp,small,strike,strong,sub,sup,tt,var,b,u,i,center,dl,dt,dd,ol,ul,li,fieldset,form,label,legend,table,caption