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,在安装之前需要确保当前平台已经安装编译工具:

[root@localhost data]# tar zxvf redis-3.0.5.tar.gz

[root@localhost data]# cd redis-3.0.5

[root@localhost src]# make

[root@localhost redis-3.0.5]# cd src/

[root@localhost src]# make install

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

[root@localhost src]# mkdir -p /usr/local/redis/bin

[root@localhost src]# mkdir -p /usr/local/redis/etc

[root@localhost src]# cp -pf redis-benchmark /usr/local/redis/bin/

[root@localhost src]# cp -pf redis-cli /usr/local/redis/bin/

[root@localhost src]# cp -pf redis-check-dump /usr/local/redis/bin/

[root@localhost src]# cp -pf redis-check-aof /usr/local/redis/bin/

[root@localhost src]# cp -pf redis-server /usr/local/redis/bin/

[root@localhost src]# cp -pf ../redis.conf /usr/local/redis/etc/

3、启动Redis

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

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

[root@localhost ~]# /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

[root@localhost ~]# wget http://soft.beauty-soft.net/lib/phpredis-master.tar.gz

[root@localhost ~]# tar zxvf phpredis-master.tar.gz

[root@localhost ~]# cd phpredis-master

(2)  使用phpize工具安装phpredis

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

[root@localhost phpredis-master]# /usr/bin/phpize

[root@localhost phpredis-master]# ./configure --with-php-config=/usr/bin/php-config

[root@localhost phpredis-master]# make

[root@localhost 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的问题。

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

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

    一.mongodb是什么? 一套高性能.易开发的文档型数据库.他使用键值对形式存放数据,能够存放包括字符串.数组.数据序列.图片.视频等在内的大多数数据文档.MongoDB完善的设计,搞笑的可编程性使 ...

  2. 【初码干货】使用阿里云对Web开发中的资源文件进行CDN加速的深入研究和实践

    提示:阅读本文需提前了解的相关知识 1.阿里云(https://www.aliyun.com) 2.阿里云CDN(https://www.aliyun.com/product/cdn) 3.阿里云OS ...

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

    在工作中,我们可能会用到各种交互效果.而这些效果在平常翻看文章的时候碰到很多,但是一时半会又想不起来在哪,所以养成知识整理的习惯是很有必要的.这篇文章给大家推荐10个在 Web 开发中很有用的效果,记 ...

  4. WEB开发中的字符集和编码

    html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,bi ...

  5. Web 开发中很实用的10个效果

    在工作中,我们可能会用到各种交互效果.而这些效果在平常翻看文章的时候碰到很多,但是一时半会又想不起来在哪,所以养成知识整理的习惯是很有必要的.这篇文章给大家推荐10个在 Web 开发中很有用的效果,记 ...

  6. Web开发中管理ipad屏幕的方向变化

    Web开发中,我们会遇到在手机垂直或水平视角时展示不同状态的情况.下面我来总结一下检测移动设备方向变化的一些方法. 1 使用javascript 直接看代码: <script type=&quo ...

  7. 今日推荐:10款在 Web 开发中很有用的占位图片服务

    设计网站时,将要使用的图像在一开始通常还不存在,这个时候布局是最重要的.然而,图像的尺寸通常是预先设置,实用一些占位图像可以帮助我们更好地预览和分析布局. 如今,有免费的占位图片自动生成工具可以使用, ...

  8. Web 开发中应用 HTML5 技术的10个实例教程

    HTML5 作为下一代网站开发技术,无论你是一个 Web 开发人员或者想探索新的平台的游戏开发者,都值得去研究.借助尖端功能,技术和 API,HTML5 允许你创建响应性.创新性.互动性以及令人惊叹的 ...

  9. Web开发中的主要概念

    一.Web开发中的主要概念1.静态资源:一成不变的.html.js.css2.动态资源:JavaWeb.输出或产生静态资源.(用户用浏览器看到的页面永远都是静态资源) 3.JavaEE:十三种技术的集 ...

随机推荐

  1. 订阅Jenkins的邮件列表,获取最新的信息

    进入https://jenkins.io/content/mailing-lists/ 点击感兴趣的话题 选择[archive]跳转到谷歌讨论组 最后,点击左上角的[Subscribe]即可加入Goo ...

  2. POJ3468 A Simple Problem with Integers

    Description 给出了一个序列,你需要处理如下两种询问. "C abc"表示给[a, b]区间中的值全部增加c (-10000 ≤ c ≤ 10000). "Q  ...

  3. ApsCMS AspCms_SettingFun.asp、AspCms-qqkfFun.asp、AspCms_Slide.asp、AspCms_StyleFun.asp、login.asp、AspCms_CommonFun.asp Vul

    catalog . 漏洞描述 . 漏洞触发条件 . 漏洞影响范围 . 漏洞代码分析 . 防御方法 . 攻防思考 1. 漏洞描述 AspCMS管理系统有较多漏洞,涉及到SQL注入.密码泄漏.后台写SHE ...

  4. [iOS AFNetworking框架实现HTTP请求、多文件图片上传下载]

    简单的JSON的HTTP传输就不说了,看一个简单的DEMO吧. 主要明白parameters是所填参数,类型是字典型.我把这部分代码封装起来了,以便多次调用.也许写在一起更清楚点. #pragma m ...

  5. HD1160FatMouse's Speed(最长单调递增子序列)

    FatMouse's Speed Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) ...

  6. HTTPS背后的加密算法

    当你在浏览器的地址栏上输入https开头的网址后,浏览器和服务器之间会在接下来的几百毫秒内进行大量的通信.InfoQ的这篇文章对此有非常详细的描述.这些复杂的步骤的第一步,就是浏览器与服务器之间协商一 ...

  7. awk过滤数据

    awk -F ',' '{if($2 ~/\./ ) {print $1,$2 }}' 20160905_names > ttt1 awk -F ',' '{if($2 !~/[0-9]+\.[ ...

  8. python操作数据库

    一,安装mysql 如果是windows 用户,mysql 的安装非常简单,直接下载安装文件,双击安装文件一步一步进行操作即可. Linux 下的安装可能会更加简单,除了下载安装包进行安装外,一般的l ...

  9. Zookeeper集群的安装和使用

    Apache Zookeeper 由 Apache Hadoop 的 Zookeeper 子项目发展而来,现已经成为 Apache 的顶级项目,它是一个开放源码的分布式应用程序协调服务,是Google ...

  10. RGB to HSI, HSI to RGB Conversion Calculator

    The RGB color model is an additive system in which each color is defined by the amount of red, green ...