问题现象
在春运使用12306买票,与在淘宝买东西等情况时会出现春节期间买票进不去,进去了刷不着票,原因是以为用户量太大
特征
1.海量用户
2.高并发
这两个现象出现以后,对应的就会造成我们的服务器瘫痪,其实并不是我们的应用服务器,而是我们的关系型数据库。关系型数据库才是最终的罪魁祸首
造成原因
1.性能瓶颈:磁盘IO性能低下
关系型数据库在存取数据的时候和读取数据的时候他要走磁盘IO。磁盘这个性能本身是比较低的
2.扩展瓶颈:数据关系复杂,扩展性差,不便于大规模集群
关系型数据库,它里面表与表之间的关系非常复杂,就是一张表,通过它的外键关联了七八张表,这七八张表又通过它的外键,每张又关联了四五张表。要想拿到数据,你就要从A到B、B到C、C到D的一直这么关联下去,最终非常影响查询的效率。同时,你想扩展下,也很难
解决思路
1.降低磁盘IO次数,越低越好 ——用内存存储
2.去除数据间关系,越简单越好 ——不存关系,只存数据
把这两个特征一合并一起,就出来了一个新的概念:NoSQL
NoSQL:即 Not-Only SQL( 泛指非关系型的数据库),作为关系型数据库的补充。 作用:应对基于海量用户和海量数据前提下的数据处理问题
特征
可扩容,可伸缩。SQL数据关系过于复杂,扩容一下难度很高,那Nosql 这种的,不存关系,所以它的扩容就简单一些。
大数据量下高性能。当数据非常多的时候,它的性能高,因为不走磁盘IO,走的是内存,性能肯定要比磁盘IO的性能快一些。
灵活的数据模型、高可用。他设计了自己的一些数据存储格式,这样能保证效率上来说是比较高的,最后一个高可用,我们等到集群内部分再去它
常见 Nosql 数据库
目前市面上常见的Nosql产品:Redis、memcache、HBase、MongoDB
应用场景
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.支持持久化,可以进行数据灾难恢复
redis的应用场景
1.为热点数据加速查询(主要场景)。如热点商品、热点新闻、热点资讯、推广类等高访问量信息等。
2.即时信息查询。如各位排行榜、各类网站访问统计、公交到站信息、在线人数信息(聊天室、网站)、设备信号等。
3.时效性信息控制。如验证码控制、投票控制等。
4.分布式数据共享。如分布式集群架构中的 session 分离。
5.消息队列
下载安装包
wget http://download.redis.io/releases/redis-5.0.0.tar.gz
解压安装包
tar -xvf redis-5.0.0.tar.gz
cd redis-5.0.0
ll
编译 (在解压的目录中执行)
make
当执行make时报错
因为Redis是C实现的,需要gcc来进行编译,所以原因是系统未安装gcc
yum install -y gcc g++ gcc-c++ make
再次执行make,若make出现错误为:致命错误,执行以下命令
make MALLOC=libc
成功后继续操作
安装(在解压的目录中执行)
make install
cd src
cd
使名称变短,方便操作
ln -s redis-5.0.0 redis
cd redis
启动服务器——参数启动
redis-server [--port port]
范例
redis-server --port 6379
启动服务器——配置文件启动
redis-server config_file_name
范例
redis-server redis.conf
启动客户端
redis-cli [-h host] [-p port]
范例
redis-cli –h 61.129.65.248 –p 6384
注意:服务器启动指定端口使用的是--port,客户端启动指定端口使用的是-p。-的数量也不同
Redis基础环境设置约定
创建配置文件存储目录
mkdir conf
创建服务器文件存储目录(包含日志、数据、临时配置文件等)
mkdir data
创建快速访问链接
ln -s redis-5.0.0 redis
服务器端设定
配置介绍
设置服务器以守护进程的方式运行,开启后服务器控制台中将打印服务器运行信息(同日志内容相同)
daemonize yes|no # 改为yes就是后台启动,看不到之前的欢迎信息,cmd窗口关闭也没影响
#windows版本的redis不支持后台启动,配置也没有用
绑定主机地址:bind ip
bind 127.0.0.1 #指定当前redis服务运行在哪个ip上(一般都指定为本机)
设置服务器端口
port 6379 #6379是redis的默认端口
日志文件
logfile "日志文件名"
设置服务器文件保存地址:dir path
dir "/redis/data"
windows配置为:dir "./data"(需要在redis安装的目录新建data文件夹)
启动
#启动服务器
redis-server /redis/conf/redis-6379.conf
#查看进程
ps -ef | grep redis
配置为后台启动之后,可以通过ps查看是否启动
客户端配置
服务器允许客户端连接最大数量,默认0,表示无限制。当客户端连接到达上限后,Redis会拒绝新的连接
maxclients count
客户端闲置等待最大时长,达到最大值后关闭对应连接。如需关闭该功能,设置为 0
timeout seconds
日志配置
设置服务器以指定日志记录级别
loglevel debug|verbose|notice|warning
日志记录文件名
logfile filename
注意:日志级别开发期设置为verbose即可,生产环境中配置为notice,简化日志输出量,降低写日志IO的频度
读写信息
设置 key,value 数据
set key value
范例
set name wawa
根据 key 查询对应的 value,如果不存在,返回空(nil)
get key
范例
get name
帮助信息
获取命令帮助文档
help [command]
范例
help set
获取组中所有命令信息名称
help [@group-name]
范例
help @string
退出命令行客户端模式
退出客户端
quit 或
exit
快捷键
Ctrl+C