Redis-系列-笔记
- 一、Redis 简介
- 二、Redis 的学习内容
一、Redis 简介
在这个部分,我们将学习以下3个部分的内容,分别是:
◆ Redis 简介(NoSQL概念、Redis概念)
◆ Redis 的下载与安装
◆ Redis 的基本操作
1.1 NoSQL概念
1.1.1 问题现象
在讲解NoSQL的概念之前呢,我们先来看一个现象:
(1)问题现象
每年到了过年期间,大家都会自觉自发的组织一场活动,叫做春运!以前我们买票都是到火车站排队,后来呢有了12306,有了他以后就更方便了,我们可以在网上买票,但是带来的问题,大家也很清楚,春节期间买票进不去,进去了刷不着票。什么原因呢,人太多了!
除了这种做铁路的,它系统做的不专业以外,还有马爸爸做的淘宝,它面临一样的问题。淘宝也崩,也是用户量太大!作为我们整个电商界的东哥来说,他第一次做图书促销的时候,也遇到了服务器崩掉的这样一个现象,原因同样是因为用户量太大!
(2)现象特征
再来看这几个现象,有两个非常相似的特征:
-
第一,用户比较多,海量用户
-
第二,高并发
这两个现象出现以后,对应的就会造成我们的服务器瘫痪。核心本质是什么呢?其实并不是我们的应用服务器,而是我们的关系型数据库。关系型数据库才是最终的罪魁祸首!
(3)造成原因
什么样的原因导致的整个系统崩掉的呢:
-
1.性能瓶颈:磁盘IO性能低下
关系型数据库在存取数据的时候和读取数据的时候他要走磁盘IO。磁盘这个性能本身是比较低的。 -
2.扩展瓶颈:数据关系复杂,扩展性差,不便于大规模集群
我们说关系型数据库,它里面表与表之间的关系非常复杂,不知道大家能不能想象一点,就是一张表,通过它的外键关联了七八张表,这七八张表又通过他的外键,每张又关联了四五张表。你想想,查询一下,你要想拿到数据,你就要从A到B、B到C、C到D的一直这么关联下去,最终非常影响查询的效率。同时,你想扩展下,也很难!
(4)解决思路
面对这样的现象,我们要想解决怎么版呢。两方面:
-
一,降低磁盘IO次数,越低越好。
-
二,去除数据间关系,越简单越好。
-
第一,降低磁盘IO次数,越低越好,怎么搞?我不用你磁盘不就行了吗?于是,内存存储的思想就提出来了,我数据不放到你磁盘里边,放内存里,这样是不是效率就高了。
-
第二,你的数据关系很复杂,那怎么办呢?干脆简单点,我断开你的关系,我不存关系了,我只存数据,这样不就没这事了吗?
把这两个特征一合并一起,就出来了一个新的概念:NoSQL
-
1.1.2 NoSQL的概念
(1)概念
NoSQL:即 Not-Only SQL( 泛指非关系型的数据库),作为关系型数据库的补充。 作用:应对基于海量用户和海量数据前提下的数据处理问题。
他说这句话说的非常客气,什么意思呢?就是我们数据存储要用SQL,但是呢可以不仅仅用SQL,还可以用别的东西,那别的东西叫什么呢?于是他定义了一句话叫做NoSQL。这个意思就是说我们存储数据,可以不光使用SQL,我们还可以使用非SQL的这种存储方案,这就是所谓的NoSQL。
(2)特征
可扩容,可伸缩。SQL数据关系过于复杂,你扩容一下难度很高,那我们Nosql 这种的,不存关系,所以它的扩容就简单一些。
大数据量下高性能。包数据非常多的时候,它的性能高,因为你不走磁盘IO,你走的是内存,性能肯定要比磁盘IO的性能快一些。
灵活的数据模型、高可用。他设计了自己的一些数据存储格式,这样能保证效率上来说是比较高的,最后一个高可用,我们等到集群内部分再去它!
(3)常见 Nosql 数据库
目前市面上常见的Nosql产品:Redis、memcache、HBase、MongoDB
(4)应用场景-电商为例
我们以电商为例,来看一看他在这里边起到的作用。
第一类,在电商中我们的基础数据一定要存储起来,比如说商品名称,价格,生产厂商,这些都属于基础数据,这些数据放在MySQL数据库。
第二类,我们商品的附加信息,比如说,你买了一个商品评价了一下,这个评价它不属于商品本身。就像你买一个苹果,“这个苹果很好吃”就是评论,但是你能说很好吃是这个商品的属性嘛?不能这么说,那只是一个人对他的评论而已。这一类数据呢,我们放在另外一个地方,我们放到MongoDB。它也可以用来加快我们的访问,他属于NoSQL的一种。
第三,图片内的信息。注意这种信息相对来说比较固定,他有专用的存储区,我们一般用文件系统来存储。至于是不是分布式,要看你的系统的一个整个 瓶颈 了?如果说你发现你需要做分布式,那就做,不需要的话,一台主机就搞定了。
第四,搜索关键字。为了加快搜索,我们会用到一些技术,有些人可能了解过,像分ES、Lucene、solr都属于搜索技术。那说的这么热闹,我们的电商解决方案中还没出现我们的redis啊!注意第五类信息。
第五,热点信息。访问频度比较高的信息,这种东西的第二特征就是它具有波段性。换句话说他不是稳定的,它具有一个时效性的。那么这类信息放哪儿了,放到我们的redis这个解决方案中来进行存储。
具体的我们从我们的整个数据存储结构的设计上来看一下。
我们的基础数据都存MySQL,在它的基础之上,我们把它连在一块儿,同时对外提供服务。向上走,有一些信息加载完以后,要放到我们的MongoDB中。还有一类信息,我们放到我们专用的文件系统中(比如图片),就放到我们的这个搜索专用的,如Lucene、solr及集群里边,或者用ES的这种技术里边。那么剩下来的热点信息,放到我们的redis里面。
1.2 Redis概念
1.2.1 redis概念
概念:Redis (REmote DIctionary Server) 是用 C 语言开发的一个开源的高性能键值对(key-value)数据库。
特征:
(1)数据间没有必然的关联关系;
(2)内部采用单线程机制进行工作;
(3)高性能。官方提供测试数据,50个并发执行100000 个请求,读的速度是110000 次/s,写的速度是81000次/s。
(4)多数据类型支持
字符串类型,string list
列表类型,hash set
散列类型,zset/sorted_set
集合类型
有序集合类型
(5)支持持久化,可以进行数据灾难恢复
1.2.2 redis的应用场景
(1)为热点数据加速查询(主要场景)。如热点商品、热点新闻、热点资讯、推广类等高访问量信息等。
(2)即时信息查询。如各位排行榜、各类网站访问统计、公交到站信息、在线人数信息(聊天室、网站)、设备信号等。
(3)时效性信息控制。如验证码控制、投票控制等。
(4)分布式数据共享。如分布式集群架构中的 session 分离消息队列.
1.3 Redis 的下载与安装
1.3.1 Redis 的下载与安装
本课程所示,均基于Center OS7安装Redis。
(1)下载安装Redis
下载安装包:
wget http://download.redis.io/releases/redis-5.0.0.tar.gz
解压安装包:
tar –xvf redis-5.0.0.tar.gz
编译(在解压的目录中执行):
make
安装(在解压的目录中执行):
make install
(2)Redis目录结构
-
redis-server,服务器启动命令
-
redis-cli,客户端启动命令
-
redis.conf,redis核心配置文件
-
redis-check-dump,RDB文件检查工具(快照持久化文件)
-
redis-check-aof,AOF文件修复工具
1.4 Redis服务器启动
1.4.1 Redis服务器启动
启动服务器——参数启动
redis-server [--port port]
范例
redis-server --port 6379
启动服务器——配置文件启动
redis-server config_file_name
范例
redis-server redis.conf
1.4.2 Redis客户端启动
启动客户端
redis-cli [-h host] [-p port]
范 例
redis-cli –h 61.129.65.248 –p 6384
注意:服务器启动指定端口使用的是–port,客户端启动指定端口使用的是-p。-的数量不同。
@在学习Redis中的很多东西时,可以类比之前学习的MySQL,操作都差不多,只不过存储数据上有些区别,MySQL关系型数据库而Redis是非关系型的@
1.4.3 Redis基础环境设置约定
创建配置文件存储目录 @为了将配置文件集中管理,上面出现的redis核心配置文件redis.conf就可以直接放里面@
mkdir conf
创建服务器文件存储目录(包含日志、数据、临时配置文件等)@也是为了文件的管理方便,今后像日志文件这样的可以在配置文件中的路径中加上data,让日志文件放到该目录下@
mkdir data
创建快速访问链接 @就是嫌redis-5.0.0太长了,用redis代替@
ln -s redis-5.0.0 redis
1.5 配置文件启动与常用配置
@这些个配置都是在redis.conf配置文件中配置的,也可以写多个redis.con,命名上加个端口号进行区分,启动时指定不同的配置文件即可@
1.5.1 服务器端设定
设置服务器以守护进程的方式运行,开启后服务器控制台中将打印服务器运行信息(同日志内容相同)
daemonize yes|no
绑定主机地址
bind ip
设置服务器端口
port port
设置服务器文件保存地址
dir path
1.5.2 客户端配置
服务器允许客户端连接最大数量,默认0,表示无限制。当客户端连接到达上限后,Redis会拒绝新的连接
maxclients count
客户端闲置等待最大时长,达到最大值后关闭对应连接。如需关闭该功能,设置为 0
timeout seconds
1.5.3 日志配置
设置服务器以指定日志记录级别
loglevel debug|verbose|notice|warning
日志记录文件名
logfile filename
注意:日志级别开发期设置为verbose即可,生产环境中配置为notice,简化日志输出量,降低写日志IO的频度。
1.6 Redis基本操作
1.6.1 命令行模式工具使用思考
功能性命令
帮助信息查阅
退出指令
清除屏幕信息
1.6.2 信息读写
设置 key,value 数据
set key value
范例
set name sunstone
根据 key 查询对应的 value,如果不存在,返回空(nil)
get key
范例
get name
1.6.3 帮助信息
获取命令帮助文档
help [command]
范例
help set
获取组中所有命令信息名称
help [@group-name]
范例
help @string
1.6.4 退出命令行客户端模式
退出客户端
quit
exit
快捷键
Ctrl+C
1.6.4 redis入门总结
到这里,Redis 入门的相关知识,我们就全部学习完了,再来回顾一下,这个部分我们主要讲解了哪些内容呢?
首先,我们对Redis进行了一个简单介绍,包括NoSQL的概念、Redis的概念等。
然后,我们介绍了Redis 的下载与安装。包括下载与安装、服务器与客户端启动、以及相关配置文件(3类)。
最后,我们介绍了Redis 的基本操作。包括数据读写、退出与帮助信息获取。