NoSQL初探之人人都爱Redis:(1)Redis简介与简单安装

article/2025/10/2 17:09:14

一、NoSQL的风生水起

 1.1 后Web2.0时代的发展要求

  随着互联网Web2.0网站的兴起,传统的关系数据库在应付Web2.0网站,特别是超大规模和高并发的SNS类型的Web2.0纯动态网站已经显得力不从心,暴露了很多难以克服的问题:

  (1)对数据库高并发读写的需求

  网站要根据用户个性化信息来实时生成动态页面和提供动态信息,所以基本上无法使用动态页面静态化技术,因此数据库并发负载非常高,往往要达到每秒上万次读写请求。关系数据库应付上万次SQL查询还勉强顶得住,但是应付上万次SQL写数据请求,硬盘IO就已经无法承受了。

  (2)对海量数据的高效率存储和访问的需求

  对于大型的SNS网站,每天用户产生海量的用户动态,以国外的Friendfeed为例,一个月就达到了2.5亿条用户动态,对于关系数据库来说,在一张2.5亿条记录的表里面进行SQL查询,效率是极其低下乃至不可忍受的。

  (3)对数据库的高可扩展性和高可用性的需求

  在基于Web的架构当中,数据库是最难进行横向扩展的,当一个应用系统的用户量和访问量与日俱增的时候,你的数据库却没有办法像Web服务器和应用服务器那样简单的通过添加更多的硬件和服务节点来扩展性能和负载能力。对于很多需要提供7*24小时不间断服务的网站来说,对数据库系统进行升级和扩展是非常痛苦的事情,往往需要停机维护和数据迁移,为什么数据库不能通过不断的添加服务器节点来实现扩展呢?

  在上面提到的“三高”的需求面前,关系数据库遇到了难以克服的障碍,而对于Web2.0网站来说,关系数据库的很多主要特性却往往无用武之地,例如:

  (1)数据库事务一致性需求

  很多Web实时系统并不要求严格的数据库事务,对读一致性的要求很低,有些场合对写一致性要求也不高。因此数据库事务管理成了数据库高负载下一个沉重的负担。

  (2)数据库的写实时性和读实时性需求

  对关系数据库来说,插入一条数据之后立刻查询,是肯定可以读出来这条数据的。并不要求这么高的实时性。

  (3)对复杂的SQL查询,特别是多表关联查询的需求

  任何大数据量的Web系统,都非常忌讳多个大表的关联查询,以及复杂的数据分析类型的复杂SQL报表查询,特别是SNS类型的网站,从需求以及产品设计角度,就避免了这种情况的产生。往往更多的只是单表的主键查询,以及单表的简单条件分页查询,SQL的功能被极大的弱化了。

  因此,关系数据库在这些越来越多的应用场景下显得不那么合适了,为了解决这类问题的非关系数据库应运而生。NoSQL 是非关系型数据存储的广义定义。它打破了长久以来关系型数据库与ACID理论大一统的局面。NoSQL 数据存储不需要固定的表结构(例如以键值对存储,它的结构不固定,每一个元组可以有不一样的字段,每个元组可以根据需要增加一些自己的键值对,这样就不会局限于固定的结构,可以减少一些时间和空间的开销),通常也不存在连接操作。

 1.2 NoSQL无与伦比的特点

  在大数据存取上具备关系型数据库无法比拟的性能优势,例如:

  (1)易扩展

  NoSQL数据库种类繁多,但是一个共同的特点都是去掉关系数据库的关系型特性。数据之间无关系,这样就非常容易扩展。也无形之间,在架构的层面上带来了可扩展的能力。

  (2)大数据量,高性能

  NoSQL数据库都具有非常高的读写性能,尤其在大数据量下,同样表现优秀。这得益于它的无关系性,数据库的结构简单。

  (3)灵活的数据模型

  NoSQL无需事先为要存储的数据建立字段,随时可以存储自定义的数据格式。而在关系数据库里,增删字段是一件非常麻烦的事情。如果是非常大数据量的表,增加字段简直就是一个噩梦。这点在大数据量的Web2.0时代尤其明显。

  (4)高可用

  NoSQL在不太影响性能的情况,就可以方便的实现高可用的架构。比如Cassandra,HBase模型,通过复制模型也能实现高可用。

  综上所述,NoSQL的非关系特性使其成为了后Web2.0时代的宠儿,助力大型Web2.0网站的再次起飞,是一项全新的数据库革命性运动。

二、Redis的脱颖而出

  随着应用对高性能需求的增加,NoSQL逐渐在各大名企的系统架构中生根发芽。时至今日,涌现出的NoSQL产品已经有很多种了,例如Membase、MongoDB、Apache Cassandra、CouchDB等。不过,在国内外互联网巨头例如社交巨头新浪微博、传媒巨头Viacom及图片分享领域佼佼者Pinterest等名企都不约而同地采用了Redis作为其NoSQL数据库的选择,到底Redis是何方神圣呢?能让如此多的名企为它而痴狂。

  按照官方的说法,Redis是一个开源的,使用C语言编写,面向“键/值”(Key/Value)对类型数据的分布式NoSQL数据库系统,特点是高性能持久存储适应高并发的应用场景。因此,可以说Redis纯粹为应用而产生,它是一个高性能的key-value数据库,并且还提供了多种语言的API(包括我们的大C#)。那么,也许我们会问:到底性能如何呢?以下是官方的bench-mark数据:

  测试完成了50个并发执行100000个请求
  设置和获取的值是一个256字节字符串。
  Linux box是运行Linux 2.6,这是X3320 Xeon 2.5 ghz。
  文本执行使用loopback接口(127.0.0.1)。
  结果:读的速度是110000次/s,写的速度是81000次/s 。(当然不同的服务器配置性能也有所不同)。

  和Memcached类似,Redis支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础上,Redis支持各种不同方式的排序。与Memcached一样,为了保证效率,数据都是缓存在内存中。区别的是Redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步(数据可以从主服务器向任意数量的从服务器上同步,从服务器可以是关联其他从服务器的主服务器。)。

  因此,Redis的出现,很大程度补偿了Memcached这类key/value存储的不足,在部分场合可以对关系数据库起到很好的补充作用

三、Redis在Windows上的安装与配置

  前面介绍了一大堆,现在开始真刀实干!首先,肯定是安装Redis,这里我们选择比较熟悉的Windows平台来进行安装。既然是Windows平台,那么肯定要选择一个Windows版本的Redis安装包(其实NoSQL大部分都是部署在Linux服务器上得,什么原因?大家都懂得,开源+免费=成熟的服务器方案)。

  (1)进入GitHub的Redis相关包下载页面:https://github.com/MSOpenTech/redis

    Of course,这个地址也是可以的:https://github.com/dmajkic/redis/downloads

  (2)选择相应版本,我这里选择的是2.6的版本,点击Download ZIP按钮进行下载;

  (3)打开压缩包,可以看到我们下载的其实是一个完整的Redis-2.6的包,包含了bin、src等文件夹,src是源码,而bin则是编译好的执行文件,也是我们主要使用的东东。进入bin目录,可以看到里面又有两个目录,一个是32位操作系统使用的,另一个则是64位操作系统使用的。

  (4)我所使用的是64位系统,所以我将redisbin64.zip拷贝出来,解压后移动至我的D:/Redis目录中,可以看到解压后的内容包含以下的一些可执行exe文件:

  下面来看看这几个可执行exe文件都是干嘛用的?

  ①redis-server.exe:服务程序,也是最最最核心的一个程序。说到底,Redis也就是我们服务器系统上一直运行的一个服务甚至就是一个进程而已。 

  ②redis-check-dump.exe:本地数据库检查

  ③redis-check-aof.exe:更新日志检查

  ④redis-benchmark.exe:性能测试,用以模拟同时由N个客户端发送M个 SETs/GETs 查询。上面所提到的测试结果就是使用的该程序来进行的。

  ⑤redis-cli.exe: 服务端开启后,我们的客户端就可以输入各种命令测试了,例如GET、SET等操作;

  另外,将刚刚下载的包里边的redis.conf默认配置文件拷贝到工作目录中(我的是D:/Redis),redis.conf主要是一些Redis的默认服务配置,包括默认端口号(一般默认6379)啊之类的配置。

  (5)既然我们知道了redis-server.exe是最核心的一个程序,那么我们就首先来将它开启。这里需要在Windows的命令行界面中来开启,首先在运行窗口输入cmd进入命令窗口,使用cd命令切换到指定的目录(我是将刚刚解压的文件放在了D:/Redis文件夹下)

  (6)最后就是惊心动魄地开启Redis的服务了,输入一句简单的命令:redis-server.exe redis.conf

  这里需要注意的是:开启Redis服务后,命令行窗口不要关闭,一旦关闭,Redis服务也会相应关闭。因此,我们一般会将其改为Windows服务,并且设置为开机自动启动,就像我们数据库服务器中的SQL Server服务和Web服务器中的IIS服务一样。

  (7)究竟我们的Redis安装好了没呢?我们可以通过新打开(记得是新打开一个,而不是将原来那个关闭了)一个cmd窗口使用redis-cli.exe来测试一下:redis-cli.exe -h 服务器IP –p 端口

  (8)既然每次都需要在命令窗口中开启Redis服务不爽,那我们就动手将其改为Windows服务,让它自动启动。通过在网上查找,我在CSDN找到了一个批处理文件和一个RedisService的可执行文件,并将这两个文件拷贝到指定的Redis目录(我的是D:/Redis):

  其中,install-service这个批处理文件的代码如下:

@echo off
set cur_path=%cd%
sc create redis-instance binpath= "\"%cur_path%\RedisService.exe\" %cur_path%\redis.conf" start= "auto" DisplayName= "Redis"

  意思是在我们的Windows中创建一个Redis的服务实例,指定要启动的程序路径与配置文件路径。这里需要注意的是:RedisService是另外的一个exe,不是我们刚刚下载下来就有的,这个RedisService.exe的下载地址为:http://pan.baidu.com/s/1sjrvmTf。启动模式设置为auto代表自动启动,显示的服务名称为Redis。这样,一个bat文件就做好了,点击运行之后,一个Redis的Windows服务也出现在了我们的Windows服务列表中,如下图所示:

四、小结

  随着新浪、赶集这些大型网站同一时刻的访问量逐步飙升,但它们却能做到让用户顺利的访问,运用的就是Redis的数据优化处理技术。因此,Redis经过了各大名企的考验,是一个高性能的NoSQL数据库,具有多种实用的用途。那么,我们.Net开发者是否可以借助Redis解决日常开发中遇到的高并发的问题呢,答案是肯定的。下一篇,我们会熟悉一下Redis为我们.Net开发者提供的API,以及Redis中提供的常见的数据类型(多种)等等。最后,衷心感谢本文的参考文献作者,特别是传智播客的王承伟老师,本文是基于其发布的公开课视频学习整理而成,感谢其提供了这么好的公开课教程!

参考文献

(1)传智播客Redis公开课,王承伟主讲,http://bbs.itcast.cn/thread-26525-1-1.html

(2)NoSQL百度百科,http://baike.baidu.com/view/2677528.htm

(3)孙立,《NoSQL开篇—为什么使用NoSQL》,http://www.infoq.com/cn/news/2011/01/nosql-why/

(4)Redis百度百科,http://baike.baidu.com/view/4595959.htm

(5)Ruthless,《Windows下安装Redis》,http://www.cnblogs.com/linjiqin/archive/2013/05/27/3101694.html

(6)张善友,《在Windows上以服务方式运行Redis》,http://www.cnblogs.com/shanyou/archive/2013/01/17/redis-on-windows.html

附件下载

(1)Redis-2.6服务包:http://pan.baidu.com/s/1dDEKojJ

(2)Redis注册Windows服务的批处理文件:http://pan.baidu.com/s/1jGJtNXs

(3)Redis注册Windows服务的启动程序(RedisServcie.exe):http://pan.baidu.com/s/1sjrvmTf

文章来自:http://www.cnblogs.com/edisonchou/p/3821228.html

转载于:https://www.cnblogs.com/bubugao/p/RedisServer.html


http://chatgpt.dhexx.cn/article/focFU0Bp.shtml

相关文章

软件公司面试总结

文章目录 面试1面试2面试3面试4面试5面试6 面试1 1、你先做个简单的自我介绍吧 我叫张三,2015年在重庆邮电大学毕业。我读的专业是电子信息。工作已经快5年了。 我上家公司的主营业务是在柬埔寨做移动支付钱包。 最近做的一个项目是聚合支付的项目,主要…

腾讯的硬盘里,有互联网的昨天今天和明天

作者:史中 来源:浅黑科技(qianheikeji) 2018年1月1日,太阳照常升起。 世界上所有的时钟合谋,把最后一个90后推过了18岁的门槛。对于这些年轻的面孔来说,自由的风终于如期而至,只是其…

机械硬盘与SSD固态硬盘性能的深度

从7200转硬盘升级到10000转的迅猛龙,那叫量变。从10000转的迅猛龙升级到SSD,这个叫质变。2者的差距是有些地方相当大,而有些却很接近,主要是难比较。经常听到有人说:我买2个黑盘组RAID 0,传输率也有接近250…

sudo rm-rf引发的惨案——Linux硬盘的分区和挂载

前言 前不久,刚使用组里的一台服务器,这台服务器平时用的人不多, 没有严格的管理机制,大家都使用同一个用户名进行远程连接,人人都有sudo权限。我因为对Linux不是非常熟悉,使用管理员权限下执行了一个删除…

DVR-硬盘录像机

硬盘录像机(Digital Video Recorder,简称DVR),即数字视频录像机,相对于传统的模拟视频录像机,采用硬盘录像,故常常被称为硬盘录像机,也被称为DVR。 它是一套进行图像存储处理的计算…

[转]80后研制出世界最快硬盘:传输速度每秒1.5GB

传输速度每秒1.5GB,仅需3秒就能传输一张DVD光盘的数据,是普通硬盘速度的15倍。一秒钟可以访问31万次,而普通硬盘仅可以访问16次。这些数据,描绘着一款固态硬盘的卓越性能。研发出这款世界传输速度最快、性能最好的固态硬盘的&…

我们测了30款移动硬盘,却如此尴尬

我最近在研究移动硬盘,如果你也感兴趣不妨来看看我这些天的研究成果吧。不卖关子,我们发现不同品牌SDD移动硬盘间存在着很大差异,如果你非常在意读写速度就需要慎重选择了;而不同品牌HDD移动硬盘间在速度上并不存在巨大差异&#…

web安全攻防渗透测试实战指南

1. Nmap的基本 Nmap ip 6 ip Nmap -A 开启操作系统识别和版本识别功能 – T(0-6档) 设置扫描的速度 一般设置T4 过快容易被发现 -v 显示信息的级别,-vv显示更详细的信息 192.168.1.1/24 扫描C段 192.168.11 -254 上 nmap -A -T4 -v -i…

加速!加速!西数万转硬盘猛禽RAID测试

[迅猛龙的袭击] 西部数据猛禽系列在玩家们的心目里或许一直是高高在上,因为在西数之前的策略里,这个系列的产品都是列入到“企业级”里的,但随着高端玩家对硬盘性能的需求越来越高,“猛禽”这个代表极端性能的产品线,也…

xboxone硬盘坏的表现_你的机械硬盘有RV振动传感器吗?三款2.5寸HDD测试

机械硬盘人人都用,虽然SSD的价格逐年下降,可是就容量/价格比来说,离机械硬盘还有不少距离。尽管HDD有着大容量的优势,可是如今硬盘存储密度越来越高,磁头距离盘片太近,现在的硬盘也越来越脆弱,经…

32g的u盘速度测试软件,速度堪比硬盘 海盗船32GB海量运动型U盘评测

速度堪比硬盘 海盗船32GB海量运动型U盘评测 出处:快科技 2010-03-23 15:39:30 作者:良宵 编辑:良宵[爆料] 收藏文章 内容导航: 第[01]页:[导言]第[02]页:[产品赏析]第[03]页:[性能测试及总结…

运维java项目的技巧 (war包、jar包、docker环境)

最近上线了修复log4j2漏洞的java项目。小结下系统更新操作过程。 一、tomcat下的war包的项目 cd /var/lib/tomcat9 root:/var/lib/tomcat9# ls webapps/ test test.war test.war-bak ROOTsystemctl stop tomcat9 备份test.war 上传新的test.war systemctl start tomcat9查…

《Linux运维总结:Windows Server 2012 R2安装JAVA环境》

文章目录 一、部署包下载二、部署步骤总结:整理不易,如果对你有帮助,可否点赞关注一下? 一、部署包下载 链接:https://pan.baidu.com/s/1U2EstyXu_r7_uD0YpERhAQ 提取码:1234二、部署步骤 1、双击运行jdk…

Java对接ansible自动运维化平台

Java对接ansible自动运维化平台实现文件采集分发 经过大量查阅,网上使用Java对接ansible自动运维化平台的示例代码几乎没有,为了方便自己后期巩固以及有需要的小伙伴,特以记录!!! 此次对接主要为以下两个…

java开发和运维的区别

前言 在大型系统中,为了减少数据库压力通常会引入缓存机制,一旦引入缓存又很容易造成缓存和数据库数据不一致,导致用户看到的是旧数据。 为了减少数据不一致的情况,更新缓存和数据库的机制显得尤为重要,接下来带领大家踩踩坑。 Spring 所有的答案在文末展示 Spring 概述…

JAVA开发运维(云基础设备监控)

在大型的商用系统中,经常需要监控云设备的健康状态,性能情况,流量数据等。及时发现系统问题,及时修复,以确保系统的高可用。检查云资源的工作内容主要包括基础监控、主动拨测、用户体验、APM监控、指标体系、业务分析、…

JAVA开发运维(CI/CD)

CI :持续性集成 CD:持续性部署 SIT:系统集成测试 UAT:用户验收测试 研发流程的变化,因为用户永远一开始不知道自己想要什么样的东西,导致了软件无法从一而终的进行设计,用户需要能立刻运行的软件和功能。 &…

Hi,运维,你懂Java吗--No.4:JVM-概述

作为运维,你不一定要会写Java代码,但是一定要懂Java在生产跑起来之后的各种机制。 本文为《Hi,运维,你懂Java吗》系列文章 第四篇,敬请关注后续系列文章 欢迎关注 龙叔运维(公众号) 持续分享运…

JAVA开发与运维(docker运维常规操作)

使用docker来安装软件步骤。 1、先装好docker环境。 1.4 docker环境及部署 1.4.1 版本 Client: Docker Engine – Community version: 20.10.12 Server: Docker Engine – Community version: 20.10.12 1.4.2 部署 1.用yum拉取阿里云镜像: yum-config-manager --add-repo …

JAVA开发运维(扁鹊见齐桓公之系统运维之痛)

引言: 扁鹊见蔡桓公,立有间,扁鹊曰:“君有疾在腠理,不治将恐深。”桓侯曰:“寡人无疾。”扁鹊出,桓侯曰:“医之好治不病以为功!” 居十日,扁鹊复见&#xff0…