什么是NOSQL
不仅仅是sql,它可以做的事情比传统的sql关系型数据库更多,它们为非关系型数据库,利用键值对的形式来对数据进行存储。
NOSQL解决什么问题?
1,对数据库高并发读写的需求。
现在数据库的并发负载特别高,往往每秒可以达到上万次的QPS,关系型数据库对于每秒上万次的查询还可以顶得住,但是对于每秒上万次的写数据请求,硬盘io就顶不住了!
2,对海量数据的高效率存储和访问的请求。
对于关系型数据来说,在一张2.5亿条记录的表里进行sql查询,效率是极其低下的;
3,对数据库的高可扩展性和高可用性的需求。
因为缓存可以设置分布式缓存,而nosql天生就具有分布式缓存的基因,高可用性更强!
主流的NOSQL产品
- redis
- mongoDB
mongoDB
mongoDB是文档型数据库,主要用在对于文本的存储中。
redis
redis是利用键值对来存储数据的,它使用c语言编写而成,它的数据主要是在内存中,所以速度非常快,而且它还有两种持久化方案来保证数据存储到硬盘中。在项目开发中,redis一般做分布式缓存使用。
redis的应用场景
- 缓存(数据查询、短链接、新闻内容、商品内容等)
- 聊天室的在线好友列表
- 任务队列(秒杀、抢购、12306等)
- 应用排行版
- 网站访问统计
- 数据过期处理(可以精确到毫秒)
- 分布式集群架构中的session分离
redis的业务流程
- 首先业务请求过来,先查询redis缓存中的有无请求数据;
- 如果有,就返回数据给请求;如果没有,就向数据库中查询;
- 向数据库查询出数据后,先存到redis中,再返回给用户;
这样做就大大降低了数据库的访问压力,提升了系统的健壮性!
redis的持久化方案
RDB分时持久化(默认)
数据有可能有丢失。在时间节点段中没有将数据持久化到硬盘的时候,如果发生意外,比如说机器死机重启等情况,就会造成数据丢失。那有没有什么好的解决方法呢?
AOF实时持久化
每次向redis中做增删改操作,都会持久化到硬盘上,这样子数据不会丢失,但是非常消耗计算机资源,比如说内存资源和CPU资源