一、NoSQL
1.引子
-
12306春节期间买票进不去,进去了刷不着票现象
-
淘宝双十一结账,刷新半天没买到
1)特征
- 海量用户
- 高并发
这两个问题的出现会造成服务器瘫痪,核心原因不是应用服务器,而是关系数据库。
2)原因
-
性能瓶颈:磁盘IO性能低下
-
扩展瓶颈:数据关系复杂,扩展性差,不便于大规模集群
- 例如一张表,通过它的外键关联了七八张表,这七八张表又通过外键,每张表也关联了四五张表,这样我们要拿到数据,就要从这张表到那张表又到第n张表,查询效率可想而知。
3)解决
- 降低磁盘IO次数,越低越好
- 去除数据间关系,越简单越好
两个特征一合并一起,就出来了一个新的概念:NoSQL
2.NoSQL概念
1)1.概念
NoSQL:即 Not-Only SQL( 泛指非关系型的数据库),作为关系型数据库的补充。 作用:应对基于海量用户和海量数据前提下的数据处理问题。
2)特征
-
可扩容,可伸缩
- SQL数据关系复杂,扩容难度高,Nosql 不存关系,扩容就简单一些。
-
大数据量下高性能
- 数据非常多的时候,不走磁盘IO,走内存,性能就高。
-
灵活的数据模型、高可用
- 有自己设置的数据存储格式,保证了高效率
3)常见 Nosql 数据库
Redis、memcache、HBase、MongoDB
4)应用场景-电商为例
第一类,在电商中我们的基础数据一定要存储起来,比如说商品名称,价格,生产厂商,这些都属于基础数据,这些数据放在MySQL数据库。
第二类,我们商品的附加信息,比如说,你买了一个商品评价了一下,这个评价它不属于商品本身。就像你买一个苹果,“这个苹果很好吃”就是评论,但是你能说很好吃是这个商品的属性嘛?不能这么说,那只是一个人对他的评论而已。这一类数据呢,我们放在另外一个地方,我们放到MongoDB。它也可以用来加快我们的访问,他属于NoSQL的一种。
第三,图片内的信息。注意这种信息相对来说比较固定,他有专用的存储区,我们一般用文件系统来存储。至于是不是分布式,要看你的系统的一个整个 瓶颈 了?如果说你发现你需要做分布式,那就做,不需要的话,一台主机就搞定了。
第四,搜索关键字。为了加快搜索,我们会用到一些技术,有些人可能了解过,像分ES、Lucene、solr都属于搜索技术。那说的这么热闹,我们的电商解决方案中还没出现我们的redis啊!注意第五类信息。
第五,热点信息。访问频度比较高的信息,这种东西的第二特征就是它具有波段性。换句话说他不是稳定的,它具有一个时效性的。那么这类信息放哪儿了,放到我们的redis这个解决方案中来进行存储。
二、Redis
1.概念
Redis (REmote DIctionary Server) 是用 C 语言开发的一个开源的高性能键值对(key-value)数据库。
2.特征
-
数据间没有必然的关联关系
-
内部采用单线程机制进行工作
-
高性能。官方提供测试数据,50个并发执行100000 个请求,读的速度是110000 次/s,写的速度是81000次/s。
-
多数据类型支持
- 字符串类型 string
- 列表类型 list
- 散列类型 hash
- 集合类型 set
- 有序集合类型 zset/sorted_set
-
支持持久化,可以进行数据灾难恢复
3.应用
- 为热点数据加速查询(主要场景),如热点商品、热点新闻、热点资讯、推广类等高访问量信息等
- 即时信息查询,如各位排行榜、各类网站访问统计、公交到站信息、在线人数信息(聊天室、网站)、设备信号等
- 时效性信息控制,如验证码控制、投票控制等
- 分布式数据共享,如分布式集群架构中的 session 分离
- 消息队列
4.安装
- 下载安装包
- 解压安装包
tar –xvf redis-5.0.0.tar.g
- 进入解压目录编译
make
- 进入解压目录安装
make install
redis-server 服务器启动命令
redis-cli 客户端启动命令
redis.conf redis核心配置文件
redis-check-dump RDB文件检查工具(快照持久化文件)
redis-check-aof AOF文件修复工具
- 启动服务器——参数启动
redis-server [–port port]
redis-server --port 6379
- 启动服务器——配置文件启动
redis-server config_file_name
redis-server redis.conf
- 启动客户端
redis-cli [-h host] [-p port]
- 创建配置文件存储目录
mkdir conf
- 创建服务器文件存储目录(包含日志、数据、临时配置文件等)
mkdir data
- 创建快速访问链接
ln -s redis-5.0.0 redis
- 设置服务器以守护进程的方式运行,开启后服务器控制台中将打印服务器运行信息(同日志内容相同)
daemonize yes|no
- 绑定主机地址
bind ip
- 设置服务器端口号
port port
- 设置服务器文件保存地址
dir path
- 服务器允许客户端连接最大数量,默认0,表示无限制。当客户端连接到达上限后,Redis会拒绝新的连接
maxclients count
- 客户端闲置等待最大时长,达到最大值后关闭对应连接。如需关闭该功能,设置为 0
timeout seconds
- 设置服务器以指定日志记录级别
loglevel debug|verbose|notice|warning
- 日志记录文件名
- 注意:日志级别开发期设置为verbose即可,生产环境中配置为notice,简化日志输出量,降低写日志IO的频度
logfile filename
5.基本操作
设置 key,value 数据
set key value
根据 key 查询对应的 value,如果不存在,返回空(nil)
get key
退出客户端
quit
exit
Ctrl+C
评论区